使用Java

时间:2018-06-16 18:59:55

标签: java zip jimfs

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

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

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

  3. 选项2对我来说减少了约5倍。

    我正在寻找一个开箱即用的内存fs拉链解决方案,但没有找到。此外 - jimfs无法与Java 7 nio zipfs结合使用(没有使用带有下划线jimfs的zipfs的API)。

    我的解决方案看起来并不干净/使用最佳实践,所以我正在寻找建议/开箱即用的解决方案/库,这将帮助我实现内存性能而无需开发&维护图书馆

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

这个怎么样:

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