簡體   English   中英

Java:從字節數組獲取ZipFile的任何方法(或帶有直接getEntry方法的任何方法)?

[英]Java: any way to get a ZipFile (or anything with a direct getEntry method) from a byte array?

我在字節數組中有一個zip文件的內容。 該文件包含許多條目(通常約為12個),但我只關心其中的三個。

我想以某種方式將其放入ZipFile對象,以便可以使用ZipFile.getEntry三個特定的ZipEntry取出。 我願意使用ZipFile以外的其他東西,這些東西具有類似getEntry的按名稱查找方法。

我的初步調查表明我不走運。 ZipFile需要文件子系統中的真實文件(我不能也不想訪問),所以我不能從這里到達那里,除了ZipFile之外,沒有其他方法可以按名稱提取特定條目。 但我想檢查一下。 在C#和Python之類的語言中,這非常簡單(在C#中,我從字節數組轉到MemoryStreamZipArchive ;在Python中,我只是將其包裝在StringIO並像一個文件一樣對待),所以我想確保自己不會丟失明顯的東西。

我的計划B是使用ZipInputStream並重復調用getNextEntry以遍歷所有十幾個條目,並丟棄所有我不在乎的條目,但這對我來說很不好。

可以為任何InputStream實例化ZipInputStream ,包括ByteArrayInputStream

除此之外,如果您堅持使用Java SE類,那么您會不走運。

問題的根源(從API設計的角度來看)是ZipFile是使用本機代碼實現的功能的包裝。 本機代碼自行打開輸入流,並使用本機文件名/路徑名。

能夠以這種方式工作的本機ZIP實現的主要原因是,JVM需要作為引導過程的一部分從ZIP文件中加載代碼。 這是本機實現加載諸如InputStream類的類之前發生的。 確實,它必須這樣做。

有許多第三方庫。 從閱讀此問答開始- 什么是壓縮/解壓縮文件的良好Java庫?

暫無
暫無

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

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