0

我正在尝试创建一个 100 csv 的 zip。我需要以最快的方式在单个 csv 中写入 100,000 行。我正在使用 openCSV、ZipEntry 方法写入 csv。

使用的一些代码:

ZipEntry zipentry = new ZipEntry(filename);
zos.putNextEntry(entry);
CSVWriter writer = new CsvWriter(new OutputStreamWriter(zos));
writer.writeNext(entries); //entries is single line of csv

目前,编写单个 csv 需要 1.5 秒,而创建完整的 zip 需要大约 120-140 秒。

我已经调试了代码,并观察到代码中的其他计算不需要时间,但写操作确实需要时间。

我尝试创建 100,000 行的列表,然后一次写入一个文件,而不是直接流式传输。但仍然需要同样的时间。

请建议最快的方法,它需要更少的时间。;-(

4

2 回答 2

2

BufferedOutputStream大幅提升 IO 性能:

请参阅Javadoc:BufferedOutputStream

通过设置这样的输出流,应用程序可以将字节写入底层输出流,而不必为每个写入的字节调用底层系统。

OutputStream out = new BufferedOutputStream(zos, 1<<16);
CSVWriter writer = new CsvWriter(new OutputStreamWriter(out);
于 2020-06-12T18:49:04.923 回答
1

尝试为您的 ZipOutputStream 使用不太激进的压缩级别,例如 3:

公共无效 setLevel(int 级别)

于 2020-06-12T18:51:14.580 回答