性能:BufferedOutputStream与FileWriter

8 java performance file-io filewriter disk-io

我一直用a FileWriter来用Java写文件到文件.显然你也可以使用一个BufferedOutputStream.在仔细阅读了两个javadoc之后,我似乎无法分辨哪个是更快/更有效.

所以我问:这两种文件I/O方法之间是否存在性能差异(即使是最小的)?如果是这样,它们是什么?为什么?如果没有,为什么它们实际上是一样的?

是否存在一个优先于另一个的情况?提前致谢!

Ber*_*ium 10

如果你真的想比较a FileWriter和a BufferedOutputStream来写一个文本文件,后者应该更快,因为I/O操作更少.

  • 在这种情况下FileWriter,每次调用write方法都将立即保持(它是无缓冲的).
  • 在a的情况下BufferedOutputStream,如果缓冲区已满,则数据将被写入磁盘(或者使用该flush方法刷新缓冲区).

但是如果你写文本文件,你应该使用Writer; 在这种情况下,我们可以比较a FileWriterBufferedWriter:

看着

FileWriter fw = new FileWriter(...)
Run Code Online (Sandbox Code Playgroud)

BufferedWriter bw = new BufferedWriter(new FileWriter(...)
Run Code Online (Sandbox Code Playgroud)

您对I/O操作的数量有相同的情况.


A 内部FileWriter使用FileOutputStream.使用a的原因FileWriter是,当您写入文件时,它会自动使用默认字符编码(例如,Java内部字符串被编码为UTF-8).如果使用a OutputStream,则必须在每次写入时手动编码:

所以这个例子是BufferedWriter:

bw.write("Hello");
Run Code Online (Sandbox Code Playgroud)

对应于以下示例BufferedOutputStream:

bos.write("Hello".getBytes(Charset.forName("utf-8")));
Run Code Online (Sandbox Code Playgroud)

如果您的默认编码是utf-8.

一个OutputStream与(原始)交易个字节,而一Writer有(文本)字符交易.