我有以下代码来下载文件列表。下载后,我将在线文件的 md5 与下载的进行比较。 当下载大小低于 1024 字节时,它们类似。对于超过 1024 字节的所有内容,都有不同的 md5 和。
现在我不知道原因。我想,这取决于1024字节的Array-Size?也许每次都会将完整的 1024 字节写入文件,但问题是,为什么它可以处理小于 1kb 的文件?
String fileUrl= url_str;
URL url = new URL(fileUrl);
BufferedInputStream bufferedInputStream = new BufferedInputStream(url.openStream());
FileOutputStream fileOutputStream =new FileOutputStream(target);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream, 1024);
byte data[] = new byte[1024];
while(bufferedInputStream.read(data, 0, 1024) >0 )
{
bufferedOutputStream.write(data);
}
bufferedOutputStream.close();
bufferedInputStream.close();
最佳答案
这已损坏:
while(bufferedInputStream.read(data, 0, 1024) >0 )
{
bufferedOutputStream.write(data);
}
您假设每个读取调用都会填满整个缓冲区。您应该使用read
的返回值:
int bytesRead;
while((bytesRead = bufferedInputStream.read(data, 0, 1024)) >0 )
{
bufferedOutputStream.write(data, 0, bytesRead);
}
(此外,您应该在 finally
block 中关闭所有流,但这是另一回事。)
关于java - 缓冲输入流无法正确加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14910380/