bzip2 是否允许在块或流级别进行随机访问解压缩?

hum*_*ace 5 random-access bzip2

这里的其他一些问题是关于能够仅压缩大压缩数据文件的一部分/块的问题。允许某种“随机访问解压缩”。Bzip2 一直是此类功能的推荐之一。

\n\n

在Wikipedia和一些称为非正式规范的文档上阅读有关 bzip 的信息后,尚不完全清楚此功能在什么级别上单独解压缩 bzip2 文件的一部分。似乎有两种选择,a)它在 s 的级别上BzipStream,b)它甚至在 s 的级别上StreamBlock(据我所知, a 内部可以有一个或多个BzipStream)。

\n\n
\n
BZipFile:=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
Run Code Online (Sandbox Code Playgroud)\n
\n\n

尽管bzip2经常受到赞扬,但在我看来,每个 BzipStream 中的存档数据不是字节对齐的,而是位对齐的,这表明单个块的单独解压并不是应该发生的事情,虽然我不能确定,因此这个问题:)

\n\n

更新

\n\n

看看man bzip2recover手册页就知道了

\n\n
\n

bzip2 以块的形式压缩文件,通常为 900kbytes 长。每个块都是独立处理的。如果介质或传输错误导致多块 .bz2 文件损坏,则可以从文件中未损坏的块中恢复数据。

\n\n

每个块的压缩表示由 48 位模式定界,这使得能够以合理的确定性找到块边界。每个块还携带自己的 32 位\n CRC,因此可以将 dam\xe2\x80\x90 老化块与未损坏块区分开。

\n
\n\n

这可能强烈表明每个块都可以单独解压缩。它是否正确?

\n