6

我的理解是Brotli将块大小信息存储在元块标头中,只有块的最终未压缩大小,没有关于压缩长度的信息(9.2)。我猜想需要创建一个包装器才能将它与多个线程一起使用,或者可能类似于 Mark Adler 的pigz.

在这种情况下,与 gzip 相同的线程原则是否适用于 Brotli,或者在多线程实现方面是否有任何可预见的问题需要注意?

4

1 回答 1

9

为此,您可以按原样使用 brotli 格式。我让他们添加将元数据放入空元块的选项(其中“空”意味着元块产生零未压缩数据)。您可以在元数据中放置标记以帮助查找元块。插入的空元块也在字节边界处开始下一个元块。

每个元块可以独立于其他元块。如果流是以这种方式构造的,那么在压缩或单独解压缩它们时将它们组合起来就没有问题。可能依赖的区域是使用的最后四个距离的环形缓冲区,以及超过当前元块开头的向后引用。对于并行使用,元块可以并且必须被构造为不依赖于最后四个距离,在它被与当前元块的距离填充之前不引用环形缓冲区。此外,不允许在当前元块之前返回的距离(其中不包括静态引用)。最后,您将附加一个空元块或元数据块以将序列带到字节边界以便于连接。

顺便说一句,您似乎正在链接到旧版本的草稿格式。这是当前版本的链接

于 2016-07-03T16:10:44.217 回答