Nat*_*man 6 java offline image
我正在制作一个包含大量图像的离线数据库程序 - 足以使jar文件超过4GB,正如Netbeans告诉我的那样,这是不允许的.
我想知道在这个限制下获取文件的最佳方法是什么,以及如何编写方法来使用Java访问图像.图像文件夹本身目前是4.63GB,并且在将来的更新中会变得更大(可能是几MB).
你有什么建议,Stackoverflow?
icz*_*cza 11
您可以创建多个罐子.为什么它必须是一个罐子?
从Java 1.7.0 build 55开始,Java支持大于4GB的jar文件和zip文件,请参阅此文章:
你也可以压缩图像,使用不同的格式将它们压缩到更小的尺寸,所以它们总共小于4GB; 考虑像JPEG这样的有损压缩.如果它们已经被最大化压缩,那么您可以考虑减小它们的尺寸(例如500x250像素而不是1000x500).
编辑:
引用java.util.zip包的javadoc :
实现可以选择性地支持PKWARE ZIP文件格式规范定义的ZIP64(tm)格式扩展.ZIP64(tm)格式扩展用于克服原始ZIP格式的大小限制.
所以看起来它是由Java实现决定它是否支持Zip64,它不是规范要求.第一个链接表明OpenJDK支持它.
此外,在上述版本(1.7.0 b55)之后,所有Oracle JDK都支持它.Netbeans可能会拒绝创建大于4 GB的jar,如果它是旧版本,或者因为它希望保持与旧JVM的兼容性.
如何判断您的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 :(");
}
Run Code Online (Sandbox Code Playgroud)
输出:
Java version: 1.8.0_20
Java vendor: Oracle Corporation
Your Java supports Zip64 :)
Run Code Online (Sandbox Code Playgroud)