簡體   English   中英

將FileSystem條目加載到內存映射文件(NIO2)的最快最干凈的方法

[英]Fastest and cleanest way to load a FileSystem entry into a memory-mapped file (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中的路徑/文件/文件系統/文件系統/文件通道,您是否為此使用了一個/兩個高級襯里? 我希望像InMemoryFile file = Files.loadIntoMem(Path)之類的東西我已經1個小時正在尋找關閉選項...

您不能真正將其直接加載到內存中。

您確實有FileChannel.open() ,然后可以從中獲取.map()但無論如何都會在磁盤上創建一個臨時條目。

也有memoryfilesystem ,但是不幸的是 ,它無法處理足夠大的文件。

我看到的最好的解決方案是將Files.copy()轉換為臨時文件,然后將mmap()轉換為臨時文件; 完成修改后,然后復制回zip文件。

但是基本上,這就是您已經做的,所以...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM