[英]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#中,我從字節數組轉到MemoryStream
到ZipArchive
;在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.