通过 URL 获取的HttpURLConnection 在用 HttpURLConnection 获取 InputStream HttpURLConnection 被关闭后 InputStream 还可以正常使用吗
时间: 2024-03-11 12:50:52 浏览: 73
在 HttpURLConnection 被关闭后,InputStream 可能会出现一些问题。因为当 HttpURLConnection 被关闭时,它会自动关闭与服务器的连接,这也会导致 InputStream 关闭,如果此时仍然尝试从 InputStream 中读取数据,则会抛出 IOException 异常。为了避免这种情况发生,建议在读取完数据后显式地关闭 HttpURLConnection,以确保 InputStream 也被正确关闭。代码示例:
```
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
// 读取数据
inputStream.close();
connection.disconnect(); // 显式地关闭 HttpURLConnection
```
相关问题
通过HttpURLConnection获取InputStream的编码
可以通过HttpURLConnection对象的getHeaderField方法获取Content-Type头部信息,进而获取编码信息。示例如下:
```
URL url = new URL("http://www.example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
String contentType = connection.getHeaderField("Content-Type");
String charset = null;
if (contentType != null) {
String[] values = contentType.split(";");
for (String value : values) {
value = value.trim();
if (value.toLowerCase().startsWith("charset=")) {
charset = value.substring("charset=".length());
break;
}
}
}
InputStream inputStream = connection.getInputStream();
```
在上述代码中,通过获取Content-Type头部信息,遍历其中的各个子项,最终获取到编码信息并保存在charset变量中。最后通过connection.getInputStream()方法获取到输入流。
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); inputStream = conn.getInputStream();得到的流转为ByteArrayInputStream
当你通过`HttpURLConnection`连接到URL并调用`openConnection().getInputStream()`时,通常返回的是`InputStream`,它代表从远程服务器接收到的数据流。这个输入流可以直接读取二进制数据,但如果你想将这个输入流转换成`ByteArrayInputStream`以便进一步操作,比如存储或解析,你可以这样做:
```java
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inputStream = conn.getInputStream();
// 创建一个新的ByteArrayOutputStream来保存数据
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 使用BufferedInputStream以提高效率地读取输入流并写入到ByteArrayOutputStream
BufferedInputStream bufferedInput = new BufferedInputStream(inputStream);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bufferedInput.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
// 关闭输入流和缓冲流
bufferedInput.close();
inputStream.close();
// 转换为ByteArrayInputStream
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(outputStream.toByteArray());
```
这样就得到了一个`ByteArrayInputStream`,其中包含了原始HTTP响应的内容。
阅读全文