使用 Java 在内存中捆绑 zip 文件
Bundling zip files in memory with Java
我需要打包几个 zip 文件(jar)。
我尝试了以下解决方案:
通过遍历输入流的每个条目并将其复制到输出流,从 ZipInputStream 注入到 ZipOutputStream(据我了解,这主要是硬盘驱动器上发生的 IO 密集型操作)using the code as in this stack-overflow question
在内存文件系统中创建,将两个 zip 解压到同一个目录,然后再次压缩。我正在使用 jimfs - https://github.com/google/jimfs
选项 2 对我来说少了大约 5 倍。
我正在寻找内存 fs 中的 zip 的开箱即用解决方案,但没有找到任何解决方案。另外 - jimfs 不能与 Java 7 nio zipfs 结合使用(没有 API 来使用带下划线的 jimfs)。
我的解决方案似乎clean/using 不是最佳实践,所以我正在寻找 advice/out 的方框 solution/library,这将帮助我在不开发和维护的情况下实现内存性能图书馆
这个怎么样:
- 对于给定的 zip 文件,找到所有文件条目;
- 读取每个条目到byte[];
- 这是一张地图;
- 为 zip 文件定义唯一键;
- 创建地图> 将所有读取的 zip 文件保存在内存中。
显然有一种方法可以将 ZipFS 与 JIMFS 捆绑在一起 - 也就是说,将文件(通过 JIFS 存储在内存中)视为 Zip 文件系统。
FileSystems.newFileSystem(
URI.create("jar:" + pathToZipFile.toUri()),
Collections.singletonMap("create", "true"));
其中 pathToZipFile 是 JIMFS 中存储的 jar 文件
我需要打包几个 zip 文件(jar)。 我尝试了以下解决方案:
通过遍历输入流的每个条目并将其复制到输出流,从 ZipInputStream 注入到 ZipOutputStream(据我了解,这主要是硬盘驱动器上发生的 IO 密集型操作)using the code as in this stack-overflow question
在内存文件系统中创建,将两个 zip 解压到同一个目录,然后再次压缩。我正在使用 jimfs - https://github.com/google/jimfs
选项 2 对我来说少了大约 5 倍。
我正在寻找内存 fs 中的 zip 的开箱即用解决方案,但没有找到任何解决方案。另外 - jimfs 不能与 Java 7 nio zipfs 结合使用(没有 API 来使用带下划线的 jimfs)。
我的解决方案似乎clean/using 不是最佳实践,所以我正在寻找 advice/out 的方框 solution/library,这将帮助我在不开发和维护的情况下实现内存性能图书馆
这个怎么样:
- 对于给定的 zip 文件,找到所有文件条目;
- 读取每个条目到byte[];
- 这是一张地图;
- 为 zip 文件定义唯一键;
- 创建地图> 将所有读取的 zip 文件保存在内存中。
显然有一种方法可以将 ZipFS 与 JIMFS 捆绑在一起 - 也就是说,将文件(通过 JIFS 存储在内存中)视为 Zip 文件系统。
FileSystems.newFileSystem(
URI.create("jar:" + pathToZipFile.toUri()),
Collections.singletonMap("create", "true"));
其中 pathToZipFile 是 JIMFS 中存储的 jar 文件