hum*_*ace 5 random-access bzip2
这里的其他一些问题是关于能够仅压缩大压缩数据文件的一部分/块的问题。允许某种“随机访问解压缩”。Bzip2 一直是此类功能的推荐之一。
\n\n在Wikipedia和一些称为非正式规范的文档上阅读有关 bzip 的信息后,尚不完全清楚此功能在什么级别上单独解压缩 bzip2 文件的一部分。似乎有两种选择,a)它在 s 的级别上BzipStream,b)它甚至在 s 的级别上StreamBlock(据我所知, a 内部可以有一个或多个BzipStream)。
\n\n\nRun Code Online (Sandbox Code Playgroud)\nBZipFile:=BZipStream+\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80BZipStream:=StreamHeader StreamBlock* StreamFooter\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80StreamHeader:=HeaderMagic Version Level\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80StreamBlock:=BlockHeader BlockTrees BlockData\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80BlockHeader:=BlockMagicBlockCRC Randomized OrigPtr \n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80BlockTrees:=SymMapNumTrees NumSels Selectors Trees\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80SymMap:=MapL1 MapL2{1,16}\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80Selectors:=Selector{NumSels}\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80Trees:=(BitLen Delta{NumSyms}{NumTrees}\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80StreamFooter:=FooterMagic StreamCRCPadding\n
尽管bzip2经常受到赞扬,但在我看来,每个 BzipStream 中的存档数据不是字节对齐的,而是位对齐的,这表明单个块的单独解压并不是应该发生的事情,虽然我不能确定,因此这个问题:)
\n\n更新
\n\n看看man bzip2recover手册页就知道了
\n\n\nbzip2 以块的形式压缩文件,通常为 900kbytes 长。每个块都是独立处理的。如果介质或传输错误导致多块 .bz2 文件损坏,则可以从文件中未损坏的块中恢复数据。
\n\n每个块的压缩表示由 48 位模式定界,这使得能够以合理的确定性找到块边界。每个块还携带自己的 32 位\n CRC,因此可以将 dam\xe2\x80\x90 老化块与未损坏块区分开。
\n
这可能强烈表明每个块都可以单独解压缩。它是否正确?
\n