[英]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.