簡體   English   中英

解壓 Java 中的 Gzip 壓縮包

[英]Decompress a Gzip archive in Java

我正在嘗試在 Java 中解壓縮大約 8000 個 gzip 格式的文件。 我的第一次嘗試是使用 GZIPInputStream 但性能很糟糕。

任何人都知道解壓縮 gzip 檔案的任何替代方法嗎? 我嘗試了 ZipInputStream,但它無法識別 gzip 格式。

先感謝您。

您需要使用緩沖。 寫入小塊數據將是低效的。 壓縮實現在 Sun JDK 中的本機代碼中。 即使不是緩沖性能,通常也應該超過合理的文件或網絡 I/O。

OutputStream out = new BufferedOutputStream(new GZIPOutputStream(rawOut));

InputStream in = new BufferedInputStream(new GZIPInputStream(rawIn));

由於本機代碼用於實現解壓/壓縮算法,因此在使用后關閉 stream(而不僅僅是底層流)要非常小心。 我發現有大量的“Deflaters”對性能非常不利。

ZipInputStream處理文件的存檔,這與壓縮 stream 完全不同。

當您說GZipInputStream的性能很糟糕時,您能更具體一點嗎? 您是否發現它是 CPU 瓶頸還是 I/O 瓶頸? 您是否在輸入和 output 上都使用了緩沖? 如果您可以發布您正在使用的代碼,那將非常有幫助。

如果您在多核機器上,您可以嘗試仍然使用GZipInputStream ,但使用多個線程,每個核心一個,還有一個共享的文件隊列仍有待處理。 (任何一個文件都只能由一個線程處理。)如果您受 I/O 限制,這可能會使事情變得更糟,但它可能值得一試。

對於這種規模,假設您的平台要求有限,您可能想要 go 本機。 您可以使用 JNI 調用庫或使用ProcessBuilder調用本機命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM