什么是允许在文件中随机读/写的最佳压缩算法?

Bri*_*ndy 23 compression adaptive-compression random-access huffman-code

什么是允许在文件中随机读/写的最佳压缩算法?

我知道任何自适应压缩算法都是不可能的.

我知道霍夫曼编码是不可能的.

有没有人有更好的压缩算法,允许随机读/写?

我认为你可以使用任何压缩算法,如果你用块写它,但理想情况下我不想一次解压缩整个块.但是,如果您有关于简单方法的建议以及如何知道块边界,请告诉我.如果这是您的解决方案的一部分,请告诉我您想要读取的数据是否跨越块边界时要执行的操作?

在您的答案的上下文中,请假设有问题的文件是100GB,有时我想读取前10个字节,有时我想读取最后19个字节,有时我想阅读17中间的字节..

Dav*_*ary 21

我对那些暗示这样的事情是不可能的回应感到震惊.

这些人从来没有听说过"压缩文件系统",自从1993年Stac Electronics因压缩文件系统技术被起诉之前就已经出现了这种情况吗?

我听说LZSLZJB是人们实现压缩文件系统的流行算法,它必然需要随机访问读取和随机访问写入.

也许最简单和最好的做法是打开该文件的文件系统压缩,让操作系统处理细节.但是如果你坚持手动处理它,也许你可以通过阅读NTFS透明文件压缩来获取一些技巧.

另请查看: "StackOverflow:压缩格式,可以很好地支持档案中的随机访问?"

  • @afeldspar通过这种愚蠢的逻辑,没有"随机访问"这样的东西,因为你不能读取1个字节而不读取它周围的4k块.更不用说在不读取整个字节的情况下无法读取1位. (3认同)
  • 如果你读到那些说"不可能"的答案,我想你会发现争议的问题在于术语.每个人都同意你可以有一个文件格式,如果你想要第10000个字节,你可以找到包含该字节的块,并通读那个块,直到你得到第10000个字节.不是每个人都认为这是"随机访问",这是问题所指定的. (2认同)

Fer*_*cio 1

我不知道有什么压缩算法允许随机读取,更不用说随机写入了。如果您需要这种能力,最好的选择是将文件分成块而不是整个压缩。

例如,
我们首先看看只读情况。假设您将文件分成 8K 块。您压缩每个块并按顺序存储每个压缩块。您需要记录每个压缩块的存储位置及其大小。然后,假设您需要从偏移量 O 开始读取 N 个字节。您需要找出它位于哪个块中 (O / 8K),解压缩该块并获取这些字节。您需要的数据可能跨越多个块,因此您必须处理这种情况。

当您希望能够写入压缩文件时,事情会变得复杂。您必须处理越来越大和越来越小的压缩块。您可能需要为每个块添加一些额外的填充,以防它扩展(未压缩时的大小仍然相同,但不同的数据将压缩为不同的大小)。如果压缩数据太大而无法放回给定的原始空间,您甚至可能需要移动块。

这基本上就是压缩文件系统的工作原理。您最好为文件打开文件系统压缩并正常读取/写入它们。