我从网址上读取了一张图片,如下所示:
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()是正确的。
答案 0 :(得分:0)
这是来自java文档:
public long getContentLengthLong()
Returns the value of the content-length header field as a long.
因此,如果它是一个文件,你没有标题并且它们匹配但是当你使用数据本身进行除HTTP流之外的http连接时,它会携带许多其他信息(标题),这就是为什么数字不匹配。