我正在使用FileWriter,我注意到了奇怪的行为.我自己缓冲我的收藏和我使用的每一行x
IOUtils.writelines(myList,"\n", writer );
Run Code Online (Sandbox Code Playgroud)
它不写入文件.我继续用更多的行来调用它,只有在它非常满后它才会写入文件.
它是否使用缓冲区?我在文档中找不到它.
T.J*_*der 12
第二句的FileWriter类概述说:
此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的.要自己指定这些值,请在FileOutputStream上构造OutputStreamWriter.
(我的重点)
很明显它是缓冲的(除非默认的字节缓冲区大小为零,并且它们的措辞非常奇怪).
我怀疑它只是使用了OutputStreamWriter一个FileOutputStream.看OutputStreamWriter:
每次调用write()方法都会导致在给定字符上调用编码转换器.生成的字节在写入底层输出流之前累积在缓冲区中.
(我的重点)
如果要确保刷新各种级别的各种缓冲区,请尽可能使用该flush方法.
我怀疑这是一个实现细节,但我希望大多数实现都使用缓冲区,是的.你当然不应该依赖它是无缓冲的.当您刷新或关闭作者时,应该没问题.
请注意,我个人不喜欢使用FileWriter它,因为它不允许你指定字符编码 - 我通常会FileOutputStream用一个OutputStreamWriter代替.
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |