以并发方式逐行处理文件

Big*_*ato 6 java concurrency java.util.concurrent

现在我正在从事有关数据格式转换的工作.有一个大文件,比如10GB,我实现的当前解决方案是逐行读取这个文件,转换每行的格式,然后输出到输出文件.我发现变换过程是一个瓶颈.所以我试图以同时的方式做到这一点.

每条线都是一个完整的单元,与其他线路无关.由于线路中的某些特定值不满足需求,因此可能会丢弃某些线路.

现在我有两个计划:

  1. 一个线程从输入文件中逐行读取数据,然后将该行放入队列,几个线程从队列中获取行,转换格式,然后将行放入输出队列,最后输出线程从输出队列中读取行并写入输出文件.

  2. 几个线程当前从输入文件的不同部分读取数据,然后处理该行并通过输出队列或文件锁输出到文件.

你们能给我一些建议吗?对此,我真的非常感激.

提前致谢!

Mic*_*ers 3

我会选择第一个选项......从小块文件中读取数据通常比一次读取整个文件慢(取决于文件缓存/缓冲/预读等)。

您可能还需要考虑一种创建输出文件的方法(从不同进程获取所有行,如果需要,可能以正确的顺序)。