黑马程序员技术交流社区

标题: IO流 [打印本页]

作者: HM何伟    时间: 2013-4-16 21:05
标题: IO流
我咋感觉IO中,关闭流对象close()和输入流中的flush()方法不起什么作用啊,有它们,和没有它们一个样,能给一实例,说明没它们会出现什么异常情况?
作者: 殇_心。    时间: 2013-4-16 21:13
异常倒是不会出现。

close方法是关闭流对象,用来节约资源。
你现在是个小程序,关不关没多大关系,但如果多了就...  你懂的。

flush方法是用来刷新的,时刻把数据存入到内存中。
如果你突然崩一下,停电了,这时候flush大用来了。
如果不用它,你的数据是不是没保存(你正在写的数据)。
作者: PANZERLEADER    时间: 2013-4-16 21:27
  1. public static void main(String[] args) {
  2.                        
  3.                         try {
  4.                                 //在D盘新建一个文本文件,里面随便写点东西
  5.                                 Reader r= new FileReader("D:\\a.txt");
  6.                                 BufferedReader br = new BufferedReader(r);
  7.                                 //这里在D盘下新建个文件,等下可以去D盘下查证结果。
  8.                                 Writer w = new FileWriter("D:\\b.txt");
  9.                                 BufferedWriter bw = new BufferedWriter(w);
  10.                                 char[] buf =new char[4];
  11.                                 //这里开始读字符串
  12.                                 while(br.read(buf)!=-1){
  13.                                         //这里往字符串里写数据
  14.                                         bw.write(buf);
  15.                                 }
  16.                                 /*
  17.                                  * 如果循环结束后不执行关闭流的操作,会发现数据并没被写到文件里。
  18.                                  * 如果加上关闭流的操作,数据会被写进文件里。
  19.                                  * close()方法中包含了flush()方法,也就是说,关闭流前会自动刷新一次
  20.                                  */
  21.                                        
  22.                                 bw.close();
  23.                                 br.close();
  24.                                
  25.                         } catch (FileNotFoundException e) {
  26.                                 e.printStackTrace();
  27.                         } catch (IOException e) {
  28.                                 e.printStackTrace();
  29.                         }
  30.                        

  31.         }
复制代码
总结下:如果不关闭流,数据就不会被写进文件。

作者: 王龙    时间: 2013-4-16 21:50
只要用到缓冲区,就要记得刷新,把这句记住,就O了
作者: 梁志兵    时间: 2013-4-16 22:29
因为数据最基本的单位是字节,数据在缓冲区,需要刷新才会写入.
close():刷新缓冲区,释放资源。流对象不可以继续使用。
flush():刷新缓冲区,流对象还可以继续使用。
作者: 陈丽莉    时间: 2013-4-16 23:30
flush()方法可以刷新数据,将缓存中的刷新到指定文件中去,刷新后文件流仍可使用;
close()方法也有刷新的作用,刷新后关闭文件,所以close后不能再使用该文件流了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2