首页 > 解决方案 > 使用 Java 在内存中捆绑 zip 文件

问题描述

我需要捆绑几个 zip 文件(罐子)。我尝试了以下解决方案:

  1. 通过遍历输入流的每个条目并将其复制到输出流(据我了解,这主要是在硬盘驱动器上发生的 IO 密集型操作),从 ZipInputStream 倒入 ZipOutputStream,就像在这个堆栈溢出问题中一样

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

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

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

我的解决方案似乎不干净/使用最佳实践,所以我正在寻找建议/开箱即用的解决方案/库,这将帮助我在不开发和维护库的情况下实现内存性能

标签: javazipjimfs

解决方案


Apperatnly 有一种方法将 ZipFS 与 JIMFS 捆绑在一起 - 即将文件(由 JIFS 存储在内存中)视为 Zip 文件系统。

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

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


推荐阅读