flush,close方法
来源:3-14 缓冲流案例
饭勺超人
2018-01-25 01:36:08
package com.mawenqiang.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class OutputStreamDemo { public static void main(String[] args) { try { // 不使用缓冲输出流进行文件写入操作 FileOutputStream fos = new FileOutputStream(new File("one.txt"), true); long startTime = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { fos.write(i); } fos.close(); long endTime = System.currentTimeMillis(); System.out.println("不适用缓冲输出流操作用时:" + (endTime - startTime)); // 使用缓冲输出流进行文件写入操作 FileOutputStream fos1 = new FileOutputStream(new File("two.txt"), true); BufferedOutputStream bos = new BufferedOutputStream(fos1); startTime = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { bos.write(i); } // bos.flush(); fos1.close(); bos.close(); endTime = System.currentTimeMillis(); System.out.println("使用缓冲输出流操作用时:" + (endTime - startTime)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
在使用缓冲输出流写入数据时,写入操作完成,直接调用bos.close()方法,抛出异常,只有先调用bos.flush();然后bos.close();
看文档当缓冲输出流直接调用close方法时首先调用flush方法,然后调用close方法,
The close
method of FilterOutputStream
calls its flush
method, and then calls the close
method of its underlying output stream.不知道这样理解对不
2回答
fos1输出流是比bos输出流先开的,先开的流要后关,所以fos1.close();与bos.close();要交换位置。
另外,虽然一般输出流不调用flush()直接调用close()也是可以的,但为了保证程序正常我们一般都会先调用flush()方法,然后再调用close()方法,这也是一个良好的编程习惯~祝学习愉快~
饭勺超人
提问者
2018-01-25
你好,可以这么理解么,bos是依据fos1创建的,所以要先关bos,后关fos1?
相似问题
回答 1
回答 1