获取InputStream的contentLength长度
时间: 2023-10-25 19:32:45 浏览: 281
获取InputStream的contentLength长度可以使用BufferedInputStream对InputStream进行包装,然后使用available()方法获取可读取的字节数,即为contentLength的长度。代码如下:
```
URL url = new URL("https://example.com/test.txt");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int contentLength = bufferedInputStream.available();
```
需要注意的是,available()方法并不是总能返回contentLength的长度,因为available()只能返回目前的可读字节数,有可能与contentLength的长度不一致。因此,建议还是使用getContentLength()方法获取contentLength的长度。
相关问题
JAVA获取InputStream的contentLength问题
在Java中,获取InputStream的contentLength需要先将InputStream转为HttpURLConnection对象,然后通过HttpURLConnection对象获取。代码如下:
```
URL url = new URL("https://example.com/test.txt");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int contentLength = connection.getContentLength();
InputStream inputStream = connection.getInputStream();
```
如果获取到的contentLength为-1,则表示长度未知。有些服务器在响应时可能不会设置Content-Length头部,这种情况下就无法获取到contentLength,只能读取InputStream中的数据。
InputStream的contentLength通过另一种方式获取到
如果你已经获取到了InputStream对象,并且需要获取该InputStream的contentLength,可以使用ByteArrayOutputStream来读取InputStream中的数据,然后通过ByteArrayOutputStream的size()方法获取到contentLength的长度。代码如下:
```
URL url = new URL("https://example.com/test.txt");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, len);
}
int contentLength = byteArrayOutputStream.size();
```
需要注意的是,这种方法会将InputStream中的数据全部读取到内存中,如果数据量很大,可能会导致内存溢出。因此,建议在读取数据时,使用合适的缓冲区大小,以避免内存溢出的问题。
阅读全文