如何在java中对内存映射压缩文件进行二进制搜索?

时间:2014-06-27 11:35:45

标签: java compression nio binary-search

我有问题,而非接近Binary search in a sorted (memory-mapped ?) file in Java

我想使用java MappedByteBuffers在大文件中实现字符串的二进制搜索,但在我的情况下,使用bzip2压缩大文件。让我们说文件是用-1选项100k块压缩的。 (实际上我不知道确切的选项,但我可以重新保存文件)。

我应该如何搜索MappedByteBuffer中的字符串?如何解压缩1个块?是否有一些标准的lib或者我应该阅读标题,缩小部分和crc?那些块是压缩状态的100k,还是100k它的未压缩数据长度?最后一块怎么样?

有人在压缩文件上完成BinarySearch,可能不是用Java吗?

1 个答案:

答案 0 :(得分:0)

您需要读取文件以获取每个块开始位置的索引。完成后,您可以对这些块进行二进制搜索。注意:如果您有基础记录或密钥,则可以将其拆分为多个块。

更好的解决方案是自己构建压缩文件。将已知数量的记录写入块并单独压缩。此外,您可以编写索引来说明每个块的起始位置以及该块的第一个键。这将允许您在不解压缩所有键的情况下找到正确的块,并且每次搜索仅解压缩一个块而不是log2(n)块。