对于第一个问题,我做了一个测试- public class Liu {
-
- public static void main(String[] args){
- FileWriter fw=null;
- //FileReader fr;
- try{
- fw=new FileWriter("D://a.txt");
- for(int i=0;i<100000;i++)
- fw.write('a');
- }
- catch(IOException e){
- }
- }
- }
复制代码 运行程序后,文件创建了,而且文件中有了内容,我们可以断定,在这个缓冲区满了之后。不用调用flush方法,java会自动将保存在缓冲区的内容写入到磁盘上。
之后又编了一个取得字符个数程序:
写入10万个a, 最后保存起来的是98304个a, 在反复多次试验中,我发现了当我写入8193个字符时,文件中最后会保存8192个字符,而当写入的字符小于8192时,文件中不会有任何东西。所以java中提供的缓冲区大小应该为8KB。
经过实验我们可以看出:无论使不使用BufferedWriter,当向文件中写入数据时,数据流始终先保存到一段缓冲区中,当写入的数据流大于8KB(使用BufferedWriter包装后是16K)而没有进行刷新流操作时,JAVA会自动刷新流,将流写入到文件中。
对于问题二:每新增一行就刷掉缓冲区
这是因为如果数据写入中间发生异常,停留在缓冲区的数据将会丢失。
|