1

我们正在使用 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);

ii) 使用 BufferedWriter 写入

BufferedWriter out = new BufferedWriter(new FileWriter(file));
writer = new CSVWriter(out);

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

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

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

使用OutputStreamWriterBufferedWriter对性能有何影响?

4

1 回答 1

4

在使用 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 ==============================

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

于 2012-12-24T13:12:10.330 回答