2016-07-03 57 views
5

這是我的理解Brotli存儲元塊頭中的塊大小信息,只有塊的最終未壓縮大小,並且沒有關於壓縮長度的信息(9.2)。我猜測,需要創建一個包裝器,以便將它用於多個線程,或者可能類似於Mark Adler的pigzBrotli壓縮多線程

在這種情況下,Brotli會採用與gzip相同的線程原理嗎?或者在涉及多線程實現時是否有任何可預見的問題要注意?

回答

8

您可以按照原樣使用brotli格式。我讓他們添加了將元數據放入空元塊的選項(其中「空」意味着元塊生成零未壓縮數據)。您可以將標記放入元數據中以幫助查找元塊。插入的空元元塊也會在字節邊界處啓動下一個元塊。

每個元塊可以是獨立於其他元塊的。如果流是以這種方式構建的,那麼在壓縮或單獨解壓縮時就沒有問題。可能依賴性的區域是使用的最後四個距離的環形緩衝區,以及經過當前元塊開始處的向後引用。爲了並行使用,元塊可以並且必須被構造以便不依賴於最後四個距離,在與當前元塊填充距離之前,不涉及環形緩衝區。另外,在當前元塊之前返回的距離將不被允許(其中不包括靜態引用)。最後,您會追加一個空白或元數據元塊,將序列帶到一個字節邊界,以方便連接。

順便說一句,它看起來像你鏈接到草案格式的舊版本。這是一個link to the current version

+0

這有助於一堆!我有點擔心元組塊(正如較早的草案所提議的那樣),所以我很高興看到您提供的選項現在可用。有沒有一種首選或推薦的方式來驗證/校驗和流;我認爲如果一切都在當地進行,這可能不是一個問題,但如果不是這樣的話,也許可能有一些需要。非常感謝你! –

+1

他們問我提出一個包裝完整性檢查和其他功能的包裝格式,我做了什麼,你可以[在這裏找到](https://github.com/madler/brotli/blob/master/br-format- v3.txt)。不過,我不知道他們接受或推薦它。 –