将FileSystem条目加载到内存映射文件(NIO2)中的最快速,最干净的方法

时间:2015-02-15 12:46:53

标签: java filesystems in-memory nio2

我想将一个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 / FileChannel(s),您是否有任何一个/两个高级别的内容?我希望像InMemoryFile文件= Files.loadIntoMem(Path)之类的东西我已经花了1个小时寻找关闭选项...

1 个答案:

答案 0 :(得分:1)

你无法将其直接加载到内存中。

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

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

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

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