0

zip/jar エントリをメモリに抽出して、zip ストリーム/FS を閉じ、一時コピーを処理せずにファイルを JVM に保持できるようにしたいと考えています。

1 つのオプションは 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) による、これに対する 1 つまたは 2 つの高レベルのライナーはありますか? 私は InMemoryFile file = Files.loadIntoMem(Path) のようなものを期待します 私は閉じるオプションを1時間探していました...

4

1 に答える 1

1

これをメモリに直接ロードすることはできません。

そこFileChannel.open()からできることはありますが、.map()とにかくディスクに一時的なエントリが作成されます。

memoryfilesystemもありますが、残念ながら、十分な大きさのファイルを処理できません。

私が見る最善の解決策はFiles.copy()、一時ファイルと mmap() に入ることです。変更が完了したら、zip ファイルにコピーして戻します。

しかし、基本的に、これはあなたがすでに行っていることなので...

于 2015-02-15T12:51:28.780 に答える