我真的很关心flush和close方法.在我的代码中,我总是关闭我的FileOutputStream对象.但是我想知道,如果我必须在这里使用flush方法,我可以在哪里使用它?
我会写一个项目,重复下载4或5个文件.我会写一个方法(用于下载文件),我的方法将循环并重复下载文件.我的方法将有一个这样的代码.
close方法调用flush,还是在关闭之前必须使用flush?
try { InputStream inputStream = con.getInputStream(); FileOutputStream outputStream = new FileOutputStream("C:\\programs\\TRYFILE.csv"); int bytesRead = -1; byte[] buffer = new byte[4096]; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer,bytesRead); } } catch(Exception e) { // } finally { outputStream.close(); inputStream.close(); }
请注意,代码工作正常:它成功下载文件.但我不知道使用冲洗.
解决方法
flush方法用于“刷新”保存在缓冲区中的字节. FileOutputStream不使用任何缓冲区,因此flush方法为空.拨打电话不会改变你的代码的结果.
使用缓冲写入器,该方法close调用显式刷新.
所以当你喜欢在关闭数据流之前写入数据,并且在缓冲区已满之前(当缓冲区已满时,写入程序开始写入而不等待刷新调用),你需要调用flush.
FileOutputStream类的源代码没有方法flush的自定义版本.所以使用的flush方法是其超级类OutputStream的版本. OutputStream中的flush的代码如下
public void flush() throws IOException { }
当你看到这是一个空的方法什么都不做,所以调用它是不一样的.