繁体   English   中英

BufferedInputStream和BufferedOutputstream是否不同于InputStream和Outputstream

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM