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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

FileReader fr = new FileReader("xxx.txt");
  FileWriter fw = new FileWriter("copy.txt");
  
  int c;
  while((c = fr.read()) != -1) {
   fw.write(c);
  }
  
  fr.close();
  //fw.close();
这个FIleWriter字符输出流继承的父类Writer底层代码显示有一个1024长度的字符缓冲区, 进行复制的时候,  如果最后没有关闭输出流, 数据会存储在缓冲区,  复制的文件就会为空  .
我的问题是:  我的xxx.txt文件设置了2000字节, 大于输出流缓存区长度, 也没有关闭输出流.    运行结果, 文件还是为空, 为什么不会复制, 不是应该会复制1024个字节过去, 而在缓冲区流剩下的部分吗?  求大神解答

5 个回复

倒序浏览
FileWriter的直接父类是OutputStreamWriter,下面一句是API的原话。建议多查查API!
在写入底层输出流之前,得到的这些字节将在缓冲区中累积。
回复 使用道具 举报
看不懂,表示继续关注
回复 使用道具 举报
理论上是这样没错……,以目前你提供出来的信息,只能先怀疑下你的"xxx.txt"设置为了2000字节是什么意思。

屏幕快照 2016-08-23 下午12.14.09.png (264.72 KB, 下载次数: 10)

屏幕快照 2016-08-23 下午12.14.09.png
回复 使用道具 举报
阿卜 发表于 2016-8-23 12:17
理论上是这样没错……,以目前你提供出来的信息,只能先怀疑下你的"xxx.txt"设置为了2000字节是什么意思。 ...

额,就是这样的,我在工作站新建了一个文件,把一堆笔记丢进去,然后保存,在工作站查看属性  有2900多字节。我就想试试看不关输出流,超出了FIleWriter输出流缓冲区的容量(是2048个字节,这个没问题吧?),会不会自动写入我新建的文件,只是有部分没有刷出来。     我测试的结果是: 超过了缓冲区容量,也没有自动写入新文件内,新的文件内啥都没有。0字节,试了好几次了。。。。。
回复 使用道具 举报
冬天有点冷 发表于 2016-8-24 01:35
额,就是这样的,我在工作站新建了一个文件,把一堆笔记丢进去,然后保存,在工作站查看属性  有2900多字 ...

或者你再把文件弄大点试试,Writer里内置的是一个1024容量的char[]数组,不像BufferedOutputStream默认的8192的byte[]数组。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马