使用 Java 在内存中捆绑 zip 文件

Bundling zip files in memory with Java

我需要打包几个 zip 文件(jar)。 我尝试了以下解决方案:

  1. 通过遍历输入流的每个条目并将其复制到输出流,从 ZipInputStream 注入到 ZipOutputStream(据我了解,这主要是硬盘驱动器上发生的 IO 密集型操作)using the code as in this stack-overflow question

  2. 在内存文件系统中创建,将两个 zip 解压到同一个目录,然后再次压缩。我正在使用 jimfs - https://github.com/google/jimfs

选项 2 对我来说少了大约 5 倍。

我正在寻找内存 fs 中的 zip 的开箱即用解决方案,但没有找到任何解决方案。另外 - jimfs 不能与 Java 7 nio zipfs 结合使用(没有 API 来使用带下划线的 jimfs)。

我的解决方案似乎clean/using 不是最佳实践,所以我正在寻找 advice/out 的方框 solution/library,这将帮助我在不开发和维护的情况下实现内存性能图书馆

这个怎么样:

  1. 对于给定的 zip 文件,找到所有文件条目;
  2. 读取每个条目到byte[];
  3. 这是一张地图;
  4. 为 zip 文件定义唯一键;
  5. 创建地图> 将所有读取的 zip 文件保存在内存中。

显然有一种方法可以将 ZipFS 与 JIMFS 捆绑在一起 - 也就是说,将文件(通过 JIFS 存储在内存中)视为 Zip 文件系统。

  FileSystems.newFileSystem(
      URI.create("jar:" + pathToZipFile.toUri()),
      Collections.singletonMap("create", "true"));

其中 pathToZipFile 是 JIMFS 中存储的 jar 文件