bzip2
(即Julian Seward 的这个程序)列出了 100k 到 900k 之间的可用块大小:
$ bzip2 --help
bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010.
usage: bzip2 [flags and input files in any order]
-1 .. -9 set block size to 100k .. 900k
这个数字对应于hundred_k_blocksize
写入压缩文件头的值。
从文档中,内存要求如下:
Compression: 400k + ( 8 x block size )
Decompression: 100k + ( 4 x block size ), or
100k + ( 2.5 x block size )
在编写原始程序时(1996 年),我想 7.6M(400k + 8 * 900k)在计算机上可能是一个巨大的内存量,但对于今天的机器来说,它什么都不是。
我的问题分为两部分:
1) 使用更大的块大小会实现更好的压缩吗?(我天真地假设是的)。有什么理由不使用更大的块吗?压缩的 cpu 时间如何随着块的大小而变化?
2) 实际上,是否存在允许更大块大小的 bzip2 代码分支(或替代实现)?这是否需要对源代码进行重大修改?
文件格式似乎足够灵活来处理这个问题。例如...由于hundred_k_blocksize
包含一个指示块大小的 8 位字符,因此可以向下扩展ASCII 表以指示更大的块大小(例如':'
= x3A
=> 1000k
、';'
= x3B
=> 1100k
、'<'
= x3C
=> 1200k
、...) .