2014-02-10 119 views
0

我有GZIP歸檔文件,裏面有兩個文件,裏面裝滿了tar實用程序。我需要將它們都提取到內存中。所以我需要得到兩個byte陣列。但所有使用GZIPInputStream的例子都只是讀取字節並將它們保存到輸出流中,因此我不知道如何獲得兩個byte[]數組。從tar.gz文件提取兩個文件到內存中

+1

「我有GZIP存檔,裏面有兩個文件。」 GZIP不能這樣工作。它沒有多個文件的概念。這只是壓縮數據。 –

+0

@JonSkeet我的錯誤,我已經更新了這個問題。 – Lingviston

+0

那麼你的意思是你已經得到了一個tar.gz文件或一個tgz文件?如果是這樣,你需要從焦油部分中分離出提取的gzip部分。當你解壓縮gzip文件時,你會得到一個tar文件,然後你可以從中得到這兩個文件。 –

回答

0

libarchive應該做你所需要的。下面是從他們的主頁上描述什麼是摘錄:

libarchive


多格式存檔和壓縮庫

源分佈包括libarchive庫, bsdtar和bsdcpio命令行程序,完整測試套件和文檔:

穩定版本:libarchive-3.1.2.tar.gzlibarchive-3.1.2.zip(自2013年1月13日)
舊版本:libarchive-2.8.5.zip(自2011年9月3日)

的libarchive庫功能:

  • 支持多種歸檔和壓縮格式。

  • 強大的自動格式檢測,包括歸檔/壓縮組合,如tar.gz.

  • 用於高性能的零拷貝內部架構。

  • 流式架構消除了歸檔大小的所有限制,入口大小的限制取決於特定的格式。

  • 當程序靜態鏈接時,仔細考慮代碼以減少膨脹。

  • 越來越多的測試套件驗證新端口的正確性。

  • 作品在大多數類POSIX系統(包括FreeBSD,Linux和Solaris等)

  • 支持Windows,包括Cygwin的,MinGW的,和Visual Studio。

bsdtarbscpio和命令行實用程序是與其它焦油和cpio實現特徵 - 和性能競爭:

  • 讀取的多種格式,包括焦油,PAX ,cpio,zip,xar,lha,ar,cab,mtree,rar和ISO映像。

  • 寫入tar,pax,cpio,zip,xar,ar,ISO,mtree和shar歸檔。

  • 自動處理使用gzip,bzip2,lzip,xz,lzma或compress壓縮的壓縮文件。

  • 獨特的格式轉換功能。

+1

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

如果我在使用libarchive的時候提供「基本部分」,並且鏈接消失,那麼這些基本部分也變得沒用。我瞭解鏈接的波動性,但在鏈接消失的情況下,我看不出如何改進答案。 –

+0

這是不正確的。鏈接可以改變。斷開的鏈接並不表示該產品不再存在或變得無用。別擔心,我繼續編輯您的答案,並在主頁的所有重要部分添加解釋,以向未來訪問者解釋libarchive是什麼。 –