Java MergeSort二进制文件

时间:2017-06-06 14:09:50

标签: java io

我有几个已排序的二进制文件,它们以某种可变长度格式存储信息(意味着其中一个段包含可变长度段的长度)。

我需要将它们合并到一个已排序的文件中。我可以成功地使用BufferedInputStream。然而,机械磁盘需要很长时间。在具有SSD的机器上,它正如预期的那样快得多。

让我困扰的是,即使在SSD上,CPU利用率也非常低,让我怀疑是否有提高速度的方法。我认为这是因为大多数时间CPU在磁盘上等待。我试图将缓冲区增加到数百MB,但无济于事。

我曾尝试使用MemoryMapped缓冲区和文件通道,但它没有改善运行时。

有什么想法吗?

编辑:使用MemoryMappedByteBuffer失败,因为合并的文件大小超过2 GB,这是MemoryMappedByteBuffer的大小限制。但即使在将较小的文件合并为GB文件之前,我也没有注意到速度或CPU利用率的提高。

由于

1 个答案:

答案 0 :(得分:0)

也许您可以更好地压缩文件或者这不是一个选项?如果瓶颈是I / O,那么减少数量是一个很好的攻击角度。 http://www.oracle.com/technetwork/articles/java/compress-1565076.html