2014-02-28 96 views
0

我想通過Java和CLI gzip命令通過GZIP比較運行字符串的輸出。輸出結果不一樣,我找出了原因,但不知道如何讓他們互相傾訴。可以將OS X gzip配置爲與Java GZIPOutputStream匹配嗎?

我讀過很多關於SO的問題,閱讀過gzip的手冊頁,以及GZIPOutputStream和DeflaterOutputStream的代碼。 GZIPOutputStream的默認壓縮級別(通過Deflator設置)爲「-1」,關於這意味着什麼沒有解釋。此外,gzip CLI僅允許1和9之間的值(包括1和9)。

那麼有沒有一種方法可以在Java或gzip命令中更改壓縮設置,以使它們產生相同的輸出?

+0

您是否試過將Java中的默認壓縮級別更改爲另一個像這樣的? OutputStream gzipout = new GZIPOutputStream(bos){{def.setLevel(Deflater.BEST_COMPRESSION);}};可能匹配gzip --best(或-9) –

+0

@MarkSetchell這是一個有趣的想法,但是這將在構造器完成它的其他操作之後設置其級別,此時其他操作已經設置了默認壓縮,等等。 –

回答

2

編號Java正在使用zlib縮放器,該縮放器源於舊版gzip命令行實用工具平減器,但不完全相同。他們通常不會產生相同的輸出,也沒有設置強迫他們這樣做。

壓縮級別-1請求默認壓縮級別,該級別在當前zlib實現中爲級別6

我不得不問,爲什麼你在乎他們的產出是一樣的。重要的是,壓縮是無損的,即gzip和Java壓縮流在解壓縮時都會產生相同的原始數據。例如,不要求不同版本的zlib在相同的壓縮級別上產生相同的輸出。

+0

這就是我曾經想過的,但需要確認我的懷疑。這是來自「那些權力」的要求,我需要一個超越「僅僅做一次往返測試就更有意義」的明確理由,因爲這似乎並不令人信服。因此,不同版本之間的輸出顯然會使編碼比較無效,並且以後每個人都可以省去很多麻煩。感謝您提供的明確答案。 –

相關問題