我想将一个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个小时寻找关闭选项...
答案 0 :(得分:1)
你无法将其直接加载到内存中。
您确实有FileChannel.open()
,然后可以.map()
,但无论如何都会在您的磁盘上创建一个临时条目。
还有memoryfilesystem,但不幸的是,它不会处理足够大的文件以使其有用。
我看到的最佳解决方案是Files.copy()
到临时文件和mmap();然后在完成修改后复制回zip文件。
但基本上,这就是你已经做过的事情,所以......