Compression 索引压缩库

Compression 索引压缩库,compression,zlib,Compression,Zlib,我正在使用一个系统,该系统压缩大文件(40GB),然后将其存储在存档中 目前我使用LIb.a来压缩C++文件,但是当我想从文件中获取数据时,我需要提取整个内容。是否有人知道一个压缩组件(最好是兼容.NET的),它可以存储原始文件位置的索引,然后不解压缩整个文件,而是查找所需内容 例如: Original File Compressed File 10 - 27 => 2-5 100-202 => 10-19 ..............

我正在使用一个系统,该系统压缩大文件(40GB),然后将其存储在存档中

目前我使用LIb.a来压缩C++文件,但是当我想从文件中获取数据时,我需要提取整个内容。是否有人知道一个压缩组件(最好是兼容.NET的),它可以存储原始文件位置的索引,然后不解压缩整个文件,而是查找所需内容

例如:

Original File       Compressed File
10 - 27         =>  2-5
100-202         =>  10-19
..............
10230-102020    =>  217-298
因为我知道文件中需要的数据只出现在原始文件的位置10-27之间,所以我想用一种方法将原始文件位置映射到压缩文件位置


是否有人知道可以提供此功能的压缩库或类似的现成工具?

我不确定这是否会对您有很大帮助,因为解决方案取决于您的需求,但我在从事的项目中遇到了类似的问题(至少我认为是这样),我必须在驱动器上保存许多文本文章,并以非常随机的方式访问它们,而且由于数据的大小,我必须压缩它们

一次压缩所有这些数据的问题在于,大多数算法在解压缩数据时都依赖于以前的数据。例如,流行的方法在执行解压缩时在运行时创建一个dictionary(关于如何解压缩数据的指令),所以从中间解压缩流是不可能的,尽管我相信这些方法可能会为此进行调整

我发现的解决方案效果最好,尽管它确实降低了压缩比,但它是将数据分块打包。在我的项目中,它很简单——每一篇文章都是一个区块,我将它们一一压缩,然后创建一个索引文件,保存在每个“区块”开始的位置,在这种情况下解压缩很容易——只需解压缩整个流,这是我想要的一篇文章

因此,我的文件如下所示:

索引;压缩(A1);压缩(A2);压缩(A3)

而不是

压缩(A1;A2;A3)

如果您不能以如此优雅的方式拆分数据,您可以尝试人工拆分数据块,例如,将数据打包为5MB数据块。因此,当您需要从7MB到13MB读取数据时,只需解压缩块5-10和10-15。 您的索引文件将如下所示:

0     -> 0
5MB   -> sizeof(compress 5MB)
10MB  -> sizeof(compress 5MB) + sizeof(compress next 5MB)
这个解决方案的问题是,它提供了稍差的压缩比。块越小,压缩效果就越差

另外:有很多数据块并不意味着你必须在硬盘上有不同的文件,只需将它们依次打包成一个文件,并记住它们何时开始


另外:是一个很好的库,用于创建可用于压缩的zip文件,并且是用c#编写的。这对我来说非常好,您可以使用它的内置功能在一个zip文件中创建多个文件来处理将数据分割成块的问题

我不确定这是否会对您有很大帮助,因为解决方案取决于您的需求,但我在从事的项目中遇到了类似的问题(至少我认为是这样),我必须在驱动器中保存许多文本文章,并以非常随机的方式访问它们,而且由于数据的大小,我不得不压缩它们

一次压缩所有这些数据的问题在于,大多数算法在解压缩数据时都依赖于以前的数据。例如,流行的方法在执行解压缩时在运行时创建一个dictionary(关于如何解压缩数据的指令),所以从中间解压缩流是不可能的,尽管我相信这些方法可能会为此进行调整

我发现的解决方案效果最好,尽管它确实降低了压缩比,但它是将数据分块打包。在我的项目中,它很简单——每一篇文章都是一个区块,我将它们一一压缩,然后创建一个索引文件,保存在每个“区块”开始的位置,在这种情况下解压缩很容易——只需解压缩整个流,这是我想要的一篇文章

因此,我的文件如下所示:

索引;压缩(A1);压缩(A2);压缩(A3)

而不是

压缩(A1;A2;A3)

如果您不能以如此优雅的方式拆分数据,您可以尝试人工拆分数据块,例如,将数据打包为5MB数据块。因此,当您需要从7MB到13MB读取数据时,只需解压缩块5-10和10-15。 您的索引文件将如下所示:

0     -> 0
5MB   -> sizeof(compress 5MB)
10MB  -> sizeof(compress 5MB) + sizeof(compress next 5MB)
这个解决方案的问题是,它提供了稍差的压缩比。块越小,压缩效果就越差

另外:有很多数据块并不意味着你必须在硬盘上有不同的文件,只需将它们依次打包成一个文件,并记住它们何时开始


另外:是一个很好的库,用于创建可用于压缩的zip文件,并且是用c#编写的。这对我来说非常好,您可以使用它的内置功能在一个zip文件中创建多个文件来处理将数据分割成块的问题

我在这里看到的问题是,大多数压缩算法不支持这种功能。因为是fe。解压缩100-202需要以前的数据。如果可以的话,你能扩大你的问题吗。您知道将来要解压缩原始文件的哪些部分吗?所以你确定,你将解压缩100-202,而不是90-220?这可能有助于我想我在这里看到的问题是,大多数压缩算法不支持这种功能。因为是fe。解压缩100-202需要以前的数据。如果可以的话,你能扩大你的问题吗。您知道将来要解压缩原始文件的哪些部分吗?所以你确定,你将解压缩100-202,而不是90-220?我想这可能会有所帮助