gpt4 book ai didi

java - 绕过 4GB JAR 限制

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:45 25 4
gpt4 key购买 nike

我正在制作一个离线数据库程序,该程序恰好包含大量图像 - 足以使 jar 文件超过 4GB,正如 Netbeans 告诉我的那样,这是不允许的。

我想知道使我的文件低于此限制的最佳方法是什么,以及如何在方法中编程以使用 Java 访问图像。图像文件夹目前本身为 4.63GB,并且在未来的更新中会变大(可能增加几 MB)。

你有什么建议,Stackoverflow?

最佳答案

您可以创建多个 jar 。为什么必须是一个 jar ?

同样从 Java 1.7.0 build 55 开始,Java 支持大于 4GB 的 jar 和 zip 文件,请参阅这篇文章:

ZIP64, The Format for > 4G Zipfile, Is Now Supported

您还可以压缩图像,使用不同的格式将它们压缩到更小的尺寸,因此它们总共小于 4GB;考虑像 JPEG 这样的有损压缩。如果它们已经被最大压缩,那么您可以考虑减小它们的尺寸(例如 500x250 像素而不是 1000x500)。

编辑:

引用 java.util.zip package 的 javadoc :

An implementation may optionally support the ZIP64(tm) format extensions defined by the PKWARE ZIP File Format Specification. The ZIP64(tm) format extensions are used to overcome the size limitations of the original ZIP format.

所以看起来是否支持Zip64取决于java实现,这不是规范要求。第一个链接表明 OpenJDK 支持它。

还用 Google 搜索了一下,发现在提到的版本 (1.7.0 b55) 之后,所有 Oracle JDK 都支持它。如果 Netbeans 是旧版本或者因为它想保持与旧 JVM 的兼容性,它可能会拒绝创建大于 4 GB 的 jar。

如何判断您的 Java 是否支持它?

如果是 Oracle JRE/JDK:查找 JRE/JDK 的 rt.jar (runtime.jar) 文件。打开它(它是一个 zip 文件)并进入 java/util/zip 文件夹。如果它有一个 ZipConstants64.class 文件,那么它就支持 Zip64。

从 Java 代码:尝试获取 Class上述类的对象。如果成功,则说明您的 Oracle JRE/JDK 支持它:

System.out.println("Java version: " + System.getProperty("java.version"));
System.out.println("Java vendor: " + System.getProperty("java.vendor"));
try {
Class.forName("java.util.zip.ZipConstants64");
System.out.println("Your Java supports Zip64 :)");
} catch (ClassNotFoundException e) {
System.out.println("Your Java doesn't support Zip64 :(");
}

输出:

Java version: 1.8.0_20
Java vendor: Oracle Corporation
Your Java supports Zip64 :)

关于java - 绕过 4GB JAR 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com