我在JProgressBar
显示 HTTP 下载状态时遇到了一个小问题。
进度条正在工作,但是它填得太快,最终超出最大值相当多,如下所示:
public void test(InputStream stream, File location) {
BufferedInputStream in = new BufferedInputStream(stream);
FileOutputStream file = new FileOutputStream(location);
BufferedOutputStream out = new BufferedOutputStream(file);
int i;
int bytesDownloaded = 0;
while ((i = in.read()) != -1) {
bytesDownloaded += i;
out.write(i);
System.out.println("Bytes downloaded: " + bytesDownloaded + " out of " + len);
update(bytesDownloaded);
}
}
问题是bytesDownloaded
最终比文件末尾的 len 大得多,in.read()
实际上是返回文件中最多的字节还是其他值?我假设前者来自 Java 7 API,但它与我的发现不一致。
我正在一个 2.69MB 的文件上测试这个片段。
这是 println 语句的输出(最后几行)
Bytes downloaded: 371525502 out of 2821490
Bytes downloaded: 371525526 out of 2821490
Bytes downloaded: 371525631 out of 2821490
Bytes downloaded: 371525788 out of 2821490
Bytes downloaded: 371526028 out of 2821490
Bytes downloaded: 371526222 out of 2821490
Bytes downloaded: 371526442 out of 2821490
Bytes下载:371526697 出 2821490
字节下载:371526914 出 2821490
现在我知道这2821490
是 2.69MB 的正确字节值,所以我的问题仍然存在,为什么read()
BufferedInputStream 的函数将文件读取字节的结尾显示为371526914
,如果这真的是字节,那么它等于大约 350MB,文件显然是不是!
有任何想法吗?