0

我想将一个 zip/jar 条目提取到内存中,这样我就可以关闭 zip 流/FS 并将文件保存在 JVM 中,而无需处理临时副本。

一种选择是使用 Files.readAllLines(Path pathToZipFSentry),但它似乎使用了缓冲阅读器,这可能会对大文件造成很多不利影响。

所以我正在研究如何在 Java NIO2 中做到这一点,似乎方法是通过 FileChannels 以 MappedByteBuffer 结束。

我不能使用 RandomAccessFile.getChannel(),因为我来自虚拟文件系统的路径,而不是文字文件。我不能使用 Files.newByteChannel(rscPath, StandardOpenOption.READ) 然后是 (fileChannel.)map() 因为它返回的 SeekableByteChannel 在界面中没有地图...

你是通过 Java8 中的 Path(s)/File(s)/FileSystem(s)/FileChannel(s) 实现的任何一个/两个高级衬里吗?我希望像 InMemoryFile file = Files.loadIntoMem(Path) 这样的东西我已经 1 小时寻找关闭选项...

4

1 回答 1

1

您不能真正将其直接加载到内存中。

您确实可以FileChannel.open()从中获得,.map()但这无论如何都会在您的磁盘上创建一个临时条目。

还有memoryfilesystem,但不幸的是,它不能处理足够大的文件以使其有用。

我看到的最好的解决方案是Files.copy()进入一个临时文件和 mmap() ;然后在完成修改后复制回 zip 文件。

但基本上,这就是你已经做的,所以......

于 2015-02-15T12:51:28.780 回答