Bri*_*ndy 23 compression adaptive-compression random-access huffman-code
什么是允许在文件中随机读/写的最佳压缩算法?
我知道任何自适应压缩算法都是不可能的.
我知道霍夫曼编码是不可能的.
有没有人有更好的压缩算法,允许随机读/写?
我认为你可以使用任何压缩算法,如果你用块写它,但理想情况下我不想一次解压缩整个块.但是,如果您有关于简单方法的建议以及如何知道块边界,请告诉我.如果这是您的解决方案的一部分,请告诉我您想要读取的数据是否跨越块边界时要执行的操作?
在您的答案的上下文中,请假设有问题的文件是100GB,有时我想读取前10个字节,有时我想读取最后19个字节,有时我想阅读17中间的字节..
Dav*_*ary 21
我对那些暗示这样的事情是不可能的回应感到震惊.
这些人从来没有听说过"压缩文件系统",自从1993年Stac Electronics因压缩文件系统技术被起诉之前就已经出现了这种情况吗?
我听说LZS和LZJB是人们实现压缩文件系统的流行算法,它必然需要随机访问读取和随机访问写入.
也许最简单和最好的做法是打开该文件的文件系统压缩,让操作系统处理细节.但是如果你坚持手动处理它,也许你可以通过阅读NTFS透明文件压缩来获取一些技巧.
另请查看: "StackOverflow:压缩格式,可以很好地支持档案中的随机访问?"
我不知道有什么压缩算法允许随机读取,更不用说随机写入了。如果您需要这种能力,最好的选择是将文件分成块而不是整个压缩。
例如,
我们首先看看只读情况。假设您将文件分成 8K 块。您压缩每个块并按顺序存储每个压缩块。您需要记录每个压缩块的存储位置及其大小。然后,假设您需要从偏移量 O 开始读取 N 个字节。您需要找出它位于哪个块中 (O / 8K),解压缩该块并获取这些字节。您需要的数据可能跨越多个块,因此您必须处理这种情况。
当您希望能够写入压缩文件时,事情会变得复杂。您必须处理越来越大和越来越小的压缩块。您可能需要为每个块添加一些额外的填充,以防它扩展(未压缩时的大小仍然相同,但不同的数据将压缩为不同的大小)。如果压缩数据太大而无法放回给定的原始空间,您甚至可能需要移动块。
这基本上就是压缩文件系统的工作原理。您最好为文件打开文件系统压缩并正常读取/写入它们。