簡體   English   中英

使用Java 8 jar命令從zip歸檔文件中提取4GB以上的文件時,“無效的CEN標頭(錯誤的簽名)”

[英]“invalid CEN header (bad signature)” when extracting a 4GB+ file from a zip archive using Java 8 jar command

我有一個包含5個文件的zip文件。 其中四個文件很小(幾KB),但是一個文件大於4GB。 我知道JDK-4681995 ,它從Java 7開始向Java添加了大文件支持(64位zip支持)。我在Windows 8.1上使用64位Java 8:

C:\Users\user\Desktop>java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

壓縮文件大小如下:

07/07/2019  10:18 AM       503,966,751 snapshot-20190707.zip

壓縮文件的內容為:

07/07/2019  09:53 AM                67 database.sha1
07/07/2019  09:51 AM     4,508,840,068 database.sql
07/07/2019  09:53 AM                74 database_schema.sha1
07/07/2019  09:51 AM            36,386 database_schema.sql
07/07/2019  09:51 AM            45,280 backup.log

如果我嘗試提取4GB文件,則會遇到一個異常,該異常看上去64位zip文件Java 7異常完全相同:

C:\Users\user\Desktop>jar xvf snapshot-20190707.zip database.sql
java.util.zip.ZipException: invalid CEN header (bad signature)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:225)
        at java.util.zip.ZipFile.<init>(ZipFile.java:155)
        at java.util.zip.ZipFile.<init>(ZipFile.java:126)
        at sun.tools.jar.Main.extract(Main.java:1004)
        at sun.tools.jar.Main.run(Main.java:305)
        at sun.tools.jar.Main.main(Main.java:1288)

是否可以使用Java 8+ jar命令從64位zip存檔中提取4GB +文件?

此異常是由Java 8中的錯誤JDK-8223811引起的,該錯誤由-f標志觸發。 提交者使用以下方法重新創建了問題:

jar xvf archive.zip *

來自對該錯誤報告的評論(2019年5月19日):

這僅在JDK 8版本上可重現。 它在JDK 9及更高版本中已修復,在最新的JDK 11、12或13中不是問題。

Java 8的解決方法是避免在使用-f標志時指定單個文件,而只是提取存檔中的所有文件:

此版本的命令成功提取了所有文件,沒有任何問題:

C:\Users\user\Desktop>jar xvf snapshot-20190707.zip
 inflated: backup.log
 inflated: database_schema.sha1
 inflated: database_schema.sql
extracted: database.sha1
 inflated: database.sql

暫無
暫無

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

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