我正在看下面的例子
其中使用以下代码
try {
BufferedWriter out = new BufferedWriter(new FileWriter("outfilename"));
out.write("aString");
out.close();
}
catch (IOException e) {}
Run Code Online (Sandbox Code Playgroud)
做得有什么好处
FileWriter fw = new FileWriter("outfilename");
Run Code Online (Sandbox Code Playgroud)
我已经尝试了两种方法,当涉及到一次追加文件一行的任务时,它们的速度似乎相当
aro*_*oth 14
在Javadoc中提供了关于这个问题的一个合理的讨论:
通常,Writer会立即将其输出发送到基础字符或字节流.除非需要提示输出,否则建议将BufferedWriter包装在其write()操作可能代价高昂的任何Writer周围,例如FileWriters和OutputStreamWriters.例如,
Run Code Online (Sandbox Code Playgroud)PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));将PrintWriter的输出缓冲到文件.如果没有缓冲,每次调用print()方法都会导致字符转换为字节,然后立即写入文件,这可能效率很低.
如果你一次写大块文本(比如整行),你可能不会注意到差异.但是,如果你有很多代码一次只附加一个字符,BufferedWriter那么效率会更高.
编辑
根据以下安德鲁的评论,FileWriter实际上使用了自己的固定大小的1024字节缓冲区.通过查看源代码确认了这一点.的BufferedWriter 来源,在另一方面,示出其使用和8192字节的缓冲区大小(默认值),其可以通过用户的任何其它期望的大小来配置.所以似乎BufferedWritervs 的好处FileWriter仅限于:
为了进一步搅浑水,在Java 6的实现的OutputStreamWriter实际委托给StreamEncoder,使用它自己的缓冲区8192个字节的默认大小.而StreamEncoder缓冲区是用户可配置的,虽然目前还没有办法直接通过封闭的访问OutputStreamWriter.
这在 outputstreamwriter 的 javadocs 中有解释。filewriter确实有一个缓冲区(在底层的 outputstreamwriter 中),但是在每次调用 write 时都会调用字符编码转换器。使用外部缓冲区可以避免如此频繁地调用转换器。
http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStreamWriter.html
| 归档时间: |
|
| 查看次数: |
10133 次 |
| 最近记录: |