在java中处理大文件

时间:2012-03-14 20:28:41

标签: java file nio

我有一个大约10 GB的巨大文件。我必须对Java中的文件执行排序,过滤等操作。每个操作都可以并行完成。

启动10个线程并且并行读取文件是否合适?每个线程读取1 GB的文件。 有没有其他选项来解决超大文件的问题并尽快处理它们? NIO是否适合这种情况?

目前,我正在连续执行操作,处理此类文件大约需要20分钟。

谢谢,

2 个答案:

答案 0 :(得分:11)

  

启动10个线程并同时读取文件是否合适?

几乎肯定不是 - 虽然这取决于。如果它来自SSD(实际上没有寻道时间)那么可能是。如果它是传统的磁盘,绝对不是。

这并不意味着您不能使用多个线程 - 您可能会创建一个线程来读取文件,只执行最基本的任务以将数据转换为可处理的块。然后使用生产者/消费者队列让多个线程处理数据。

如果不知道“排序,过滤等”(这是非常模糊的)我们无法真正说明该过程的可并行化程度 - 但尝试在单个文件上并行执行IO将< em>可能没有帮助。

答案 1 :(得分:1)

尝试分析代码以查看瓶颈所在。您是否尝试过让一个线程读取整个文件(或尽可能多),并将其交给10个线程进行处理?如果文件I / O是你的瓶颈(这似乎是合理的),这将改善你的整体运行时间。