- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在制作一个离线数据库程序,该程序恰好包含大量图像 - 足以使 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/
#include typedef std::vector vc; typedef std::vector vvc; vvc f() { const int N = (1 不把它还给操作系统。 因
我正在尝试训练 Dlib's train_shape_predictor_ex.cpp与 Halen数据集。我在 Release模式 中使用 Visual Studio 将代码编译为 64 位平台 作
当我试图解决this 时想到了这个问题。问题。 我有一个容量为 120 GB 的硬盘,其中 100 GB 被一个巨大的文件占用。所以 20 GB 仍然是免费的。 我的问题是,我们如何将这个巨大的文件拆
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Can you allocate a very large single chunk of memory (
我有一台运行 Linux (3.19.5-200.fc21.x86_64) 的 128 GB RAM 的计算机。但是,我不能在单个进程中分配超过 ~30 GB 的 RAM。除此之外,malloc 失败
我需要为 808704000 个 float 分配内存,大约是 3085 MB。我的电脑有 32 GB 内存,运行 64 位 Linux (CentOS 6.6)。每次我尝试分配内存时,malloc
很抱歉这个愚蠢的问题,但是当reading about 32 bits limitation ,我发现由于 Memory-Mapped 方法,MongoDB 不能存储超过 2 GB,但是: 2^32
假设我们有一个 32 位地址,那么每一位可以是 1 或 0。 所以组合总数等于2^32。 所以我们可以表示 2^32 个地址(没有单位)。 但为什么人们说 32 位地址可以表示 2^32 字节地址(为
好吧,这个问题确实是一个挑战! 背景 我正在从事一个涉及比正常数字更大的基于算术的项目。我是新手,我打算使用 4 GB 文件大小的最坏情况(我什至希望将其扩展到 5GB 上限,因为我之前看到文件大小大
我在文件系统上有大约 12 个大小为 1 GB 到 10 GB 的存储库,我需要为所有这些存储库设置自动备份(我们的旧备份脚本在计算机出现故障时丢失了) XP 64 位机器。 看完this quest
我尝试调整 Linux VM 上的操作系统磁盘大小,该 VM 通常由 azure 自动创建。我无法创建自定义操作系统磁盘 - 请告知我该怎么做? enter image description her
我在 .NET 中遇到了一个问题,我的数组受到我拥有的 RAM 数量的限制,并且我需要可以容纳至少 40 GB 字节的数组。我正在考虑使用硬盘驱动器作为虚拟数组的想法不在乎它是否慢。 我正在研究这个想
我尝试调整 Linux VM 上的操作系统磁盘大小,该 VM 通常由 azure 自动创建。我无法创建自定义操作系统磁盘 - 请告知我该怎么做? enter image description her
我的目标是看看当使用比物理 GPU 内存所能容纳的更多纹理数据时会发生什么。我的第一次尝试是加载多达 40 个 DDS 纹理,导致内存占用比 GPU 内存高得多。但是,我的场景在 9500 GT 上仍
Windows 上的 JDK 最多需要 2 GB 左右的 RAM。即使我们为 JDK 分配更多 RAM;它不接受它。如果我需要在 Windows 上运行需要 8 GB RAM 的进程;我怎样才能实现它
我有一个程序需要分配2个15亿长度的整数数组。这是一个编码挑战( https://projecteuler.net/problem=282 ),并且没有办法使用如此大的数组(如果有,请不要告诉我;我应
假设我有一个 32 位内核。 4 Gb RAM,10 Gb 交换分区。 我有一个在无限循环中有 malloc 的进程。因此,最终系统的 OOM 将终止该进程。这里有两个论点。 参数 1:因为它是 32
我有一个可以大于 4GB 的文件。我正在使用 linux split 命令按行拆分它(这是要求)。但是拆分原始文件后,我希望拆分文件的大小始终小于 2GB。原始文件大小可能在 3-5 GB 之间。我想
我有一台带有 32GB RAM 的 Mac 服务器(雪豹)。当我尝试在 Perl (v 5.10.0) 中分配超过 1.1GB 的 RAM 时,出现内存不足错误。这是我使用的脚本: #!/usr/bi
我们正在尝试运行.NET 4 Web应用程序(在8 GB,8核心Windows 2008 R2 64位Webedition服务器上),该应用程序使用Spire.doc创建Word mailmerge文
我是一名优秀的程序员,十分优秀!