[英]Is BufferedInputStream and BufferedOutputstream different from InputStream and Outputstream
最近,当我尝试在Android应用程序中实现基本文件下载程序时,我在使用InputStreams和OutputStreams时遇到了麻烦。
我使用apache HttpClient类获得了InputStream对象,然后尝试将流写入文件..但是奇怪的是,当我缓冲InputStream或OutputStream时,我得到了不可读的文件....这是代码。
//为了使代码简洁,我删除了异常并关闭了流。
private void download(InputStream in,String fileName){
//if i dont use the buffered thing and read directly from in everything is ok
// same is the buffered out i had to use in/outstream
BufferedInputStream bufferedIn = new BufferedInputStream(in);
FileOutputStream fout = new FileOutputStream(new File(fileName));
BufferedOutputstream bufferedOut = new BufferedOutputstream(fout);
int read = -1;
while((read = bufferedIn.read()) != -1){
bufferedOut.write(read);
}
//close the buffers
}
完成后,您必须刷新缓冲的输出流。
在任何情况下,您可能都希望flush()
输出(由close()
隐式完成),但是对于BufferedOutputStream
它比其他OutputStream
更为重要。 如果您有FileOutputStream
,则执行的唯一缓冲是操作系统的缓冲。 如果您有BufferedOutputStream
,则Java会在其之上执行自己的缓冲。
如果您使用Java 7或更高版本,我建议编写如下代码:
try (BufferedInputStream bIn = new BufferedInputStream(in);
BufferedOutputStream bOut = new BufferedOutputStream(new FileOutputStream(fileName))) {
for (int read; ((read = bIn.read()) != -1; )
bOut.write(read);
}
在您的情况下,我怀疑您正在关闭FileOutputStream
而不是BufferedOutputStream
。 因此该文件被截断甚至是空的,因为未刷新BufferedOutputStream
的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.