【发布时间】:2018-04-01 12:59:10
【问题描述】:
我从 URL 读取图像,如下所示:
URL url = new URL("http://link-to-image");
然后我想校验它的内容,所以我需要 InputStream.mark() 方法。但是当我调用 reset() 时,我得到了带有消息“重置为无效标记”的 IOException
图片大小为82.271KB,有一点奇怪:
URLConnection con = url.openConnection();
con.getContentLength(); // value is 84246, correct
InputStream is = con.getInputStream();
is.available(); // value is 73203, incorrect
我可以调用reset()成功使用标记(84246 + 1),为什么InputStream返回错误值?
PS:如果 InputStream from File,available() 是对的。
【问题讨论】:
-
"is.available(); // 值为 73203,不正确",不只是阅读 javadocs,它只是对可能内容的估计,而不是实际长度。您应该首先检查该流实现是否支持标记。流在关闭之前没有长度,如果没有关闭,它们仍然可以增长。
-
The documentation for InputStream.available() 对此非常清楚。在任何情况下,您都不应依赖它来返回可以读取的总字节数。
标签: java url io inputstream