用java处理大型文件

用java处理大型文件,java,file,nio,Java,File,Nio,我有一个大约10GB的大文件。我必须对Java中的文件进行排序、筛选等操作。每个操作都可以并行完成 启动10个线程并并行读取文件好吗?每个线程读取1 GB的文件。 有没有其他方法可以解决超大文件的问题并尽快处理它们?NIO适合这种情况吗 目前,我正在执行串行操作,处理此类文件大约需要20分钟 谢谢 启动10个线程并并行读取文件好吗 几乎可以肯定不会——尽管这要视情况而定。如果它来自SSD(实际上没有寻道时间),那么可能。如果是传统磁盘,肯定不是 但这并不意味着不能使用多个线程——可以创建一个线程

我有一个大约10GB的大文件。我必须对Java中的文件进行排序、筛选等操作。每个操作都可以并行完成

启动10个线程并并行读取文件好吗?每个线程读取1 GB的文件。 有没有其他方法可以解决超大文件的问题并尽快处理它们?NIO适合这种情况吗

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

谢谢

启动10个线程并并行读取文件好吗

几乎可以肯定不会——尽管这要视情况而定。如果它来自SSD(实际上没有寻道时间),那么可能。如果是传统磁盘,肯定不是

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


如果不知道“排序、筛选等”(这一点相当模糊),我们首先就无法真正判断流程的可并行性——但尝试在单个文件上并行执行IO可能不会有帮助。

尝试分析代码以了解瓶颈所在。您是否尝试过让一个线程读取整个文件(或尽可能多地读取),然后将其交给10个线程进行处理?如果文件I/O是您的瓶颈(这似乎是合理的),那么这将提高您的总体运行时间。

如果您可以访问多台计算机,Map/Reduce可能是您可以考虑的另一个解决方案。