A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM何伟 中级黑马   /  2013-4-16 21:05  /  1551 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我咋感觉IO中,关闭流对象close()和输入流中的flush()方法不起什么作用啊,有它们,和没有它们一个样,能给一实例,说明没它们会出现什么异常情况?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
异常倒是不会出现。

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

flush方法是用来刷新的,时刻把数据存入到内存中。
如果你突然崩一下,停电了,这时候flush大用来了。
如果不用它,你的数据是不是没保存(你正在写的数据)。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
  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.         }
复制代码
总结下:如果不关闭流,数据就不会被写进文件。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
只要用到缓冲区,就要记得刷新,把这句记住,就O了
回复 使用道具 举报
因为数据最基本的单位是字节,数据在缓冲区,需要刷新才会写入.
close():刷新缓冲区,释放资源。流对象不可以继续使用。
flush():刷新缓冲区,流对象还可以继续使用。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
flush()方法可以刷新数据,将缓存中的刷新到指定文件中去,刷新后文件流仍可使用;
close()方法也有刷新的作用,刷新后关闭文件,所以close后不能再使用该文件流了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马