我的理解是
Brotli
将块大小的信息存储在元块头中,只有块的最终未压缩大小,并且没有关于压缩长度的信息(
9.2).我猜想需要创建一个包装器才能将它用于多个线程,或者可能类似于Mark Adler的
pigz
.
相同的线程原则是否适用于Brotli,就像在这种情况下使用gzip一样,或者在多线程实现方面是否有任何可预见的问题需要注意?
解决方法
您可以将brotli格式用于此目的.我让他们添加了将元数据放入空元块的选项(其中“空”表示元块产生零未压缩数据).您可以将标记放在元数据中以帮助查找元块.插入的空元块也在字节边界处开始下一个元块.
每个元块可以独立于其他元块.如果以这种方式构造流,那么在压缩或单独解压缩它们时没有问题.可能依赖的区域是所使用的最后四个距离的环形缓冲区,以及经过当前元块开始的向后引用.对于并行使用,可以且必须构造元块以便不依赖于最后四个距离,而不是指向环形缓冲器,直到它已经填充了距当前元块的距离.此外,不允许在当前元块之前返回的距离(其中不包括静态引用).最后,您将附加一个空元数据或元数据元块,以将序列带到字节边界以便于连接.
顺便说一句,看起来你正在链接到草稿格式的旧版本.这是一个link to the current version.