将文件系统条目加载到内存映射文件 (NIO2) 的最快最干净的方法

Fastest and cleanest way to load a FileSystem entry into a memory-mapped file (NIO2)

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

一个选项是使用 Files.readAllLines(Path pathToZipFSentry),但它似乎使用了缓冲的 reader,这对大文件有很大的不利影响。

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

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

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

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

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

还有 memoryfilesystem,但不幸的是,它无法处理大到无法使用的文件。

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

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