URL - InputStream.available()小于URLConnection.getContentLength()为什么?

时间:2017-10-20 10:55:18

标签: java url io inputstream

我从网址上读取了一张图片,如下所示:

URL url = new URL("http://link-to-image");

然后我想校验其内容,所以我需要InputStream.mark()方法。但是我收到IOException消息"重置为无效标记"当我调用reset()

图片大小为82.271KB,有一些奇怪的东西:

URLConnection con = url.openConnection();
con.getContentLength(); // value is 84246, correct
InputStream is = con.getInputStream();
is.available(); // value is 73203, incorrect

我可以调用reset()成功使用mark(84246 + 1),为什么InputStream返回错误的值?

PS:如果来自File的InputStream,available()是正确的。

1 个答案:

答案 0 :(得分:0)

这是来自java文档:

public long getContentLengthLong()

Returns the value of the content-length header field as a long.

因此,如果它是一个文件,你没有标题并且它们匹配但是当你使用数据本身进行除HTTP流之外的http连接时,它会携带许多其他信息(标题),这就是为什么数字不匹配。