你是不是这么声明的 BufferedWriter writer1 = new BufferedWriter(new FileWriter(file)); BufferedWriter writer2 = new BufferedWriter(writer1);这样的效果其实是一个writer在起作用
我是这样声明的: writer1 = new BufferedWriter (new OutputStreamWriter (new FileOutputStream("H:\\log_18.csv", true))); writer2 = new BufferedWriter (new OutputStreamWriter (new FileOutputStream("H:\\log_18.csv", true))); 但是发现一个现象,如果声明超过2个,第3个开始生成的对象地址就全部和第2个相同了,但输出结果还是象我开始那样,按对象的先后输出。
BufferedWriter writer1 = new BufferedWriter(new FileWriter(file));
BufferedWriter writer2 = new BufferedWriter(writer1);这样的效果其实是一个writer在起作用
writer1 = new BufferedWriter
(new OutputStreamWriter
(new FileOutputStream("H:\\log_18.csv", true)));
writer2 = new BufferedWriter
(new OutputStreamWriter
(new FileOutputStream("H:\\log_18.csv", true)));
但是发现一个现象,如果声明超过2个,第3个开始生成的对象地址就全部和第2个相同了,但输出结果还是象我开始那样,按对象的先后输出。
它只有到 显示的调用flush()或close()或对象即将被垃圾回收器回收时 才将内容写入文件的.
你可以这样试试:
writer1.write("writer1");
writer1.flush();
writer2.write("writer2");
writer2.flush();writer1.write("writer1");
writer1.flush();
writer2.write("writer2");
writer2.flush();
首先是在内存中生成默认的缓冲区来准备存放你的东东,默认的大小好像是512k吧
只有调用flush()或者buffer已经曼的时候才被写到目的地
我想对于同一个文件,如果说生成多个BufferedWriter代表什么,下面是10个时的输出的对象ID:
writer1:java.io.BufferedWriter@209f4e
writer2:java.io.BufferedWriter@3ac748
writer3:java.io.BufferedWriter@3ac748
writer4:java.io.BufferedWriter@3ac748
writer5:java.io.BufferedWriter@3ac748
writer6:java.io.BufferedWriter@3ac748
writer7:java.io.BufferedWriter@3ac748
writer8:java.io.BufferedWriter@3ac748
writer9:java.io.BufferedWriter@3ac748
writer10:java.io.BufferedWriter@3ac748
你们会发现除了第一个,后面都相等。
但是如果你使用flush就会发现,他们还是自己对应自己的flush。能不能解释一下?