使用 OpenCSV 的 FileOutputStream 的性能影响

use*_*913 1 fileoutputstream bufferedwriter opencsv

我们正在使用 OpenCSV

(http://opencsv.sourceforge.net/apidocs/au/com/bytecode/opencsv/CSVWriter.html)

从包含 xml 内容的文件编写报告。

有两种方法可以解决这个问题 ->

i) 使用 FileOutputStream 写入

FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osr= new OutputStreamWriter(fos);
writer = new CSVWriter(osr);
Run Code Online (Sandbox Code Playgroud)

ii) 使用 BufferedWriter 写入

BufferedWriter out = new BufferedWriter(new FileWriter(file));
writer = new CSVWriter(out);
Run Code Online (Sandbox Code Playgroud)

有谁知道选择一个选项而不是另一个选项会如何影响本报告的撰写绩效?

据我了解,OpenCSV 并不关心只要它获得可以使用的流即可。

性能的增量(差异)将是其之前的步骤,其中从文件创建输出流。

使用OutputStreamWriter与BufferedWriter对性能有何影响?

Jam*_*ett 5

使用 Google Caliper运行一些基准测试后,看来 BufferedWriter 选项是最快的(但实际上没有太大区别,所以我只使用您觉得舒服的选项)。

如何解释结果:

  • 该FileOutputStreamWriter场景对应选项 i

  • 该BufferedWriter场景对应选项ii

  • 该FileWriter场景是我添加的,仅使用普通的旧 FileWriter。

每个基准测试运行 3 次:写入 1000、10,000 和 100,000 行。

测试在 Linux Mint、i5-2500k (1.6GHz) CPU、8GB RAM 和 Oracle JDK7(写入 SATA 绿色硬盘)上运行。结果会因不同的设置而异,但这应该有助于比较。

  rows              benchmark     ms linear runtime
  1000 FileOutputStreamWriter   6.10 =
  1000         BufferedWriter   5.89 =
  1000             FileWriter   5.96 =
 10000 FileOutputStreamWriter  50.55 ==
 10000         BufferedWriter  50.71 ==
 10000             FileWriter  51.64 ==
100000 FileOutputStreamWriter 525.13 =============================
100000         BufferedWriter 505.05 ============================
100000             FileWriter 535.20 ==============================
Run Code Online (Sandbox Code Playgroud)

仅供参考 opencsv 将Writer您提供的内容包装在PrintWriter.