2017-06-20 6 views
-1

FileChannel documentationは、ファイルをFSキャッシュに手動で置くことができます。しかし、FileChannelには、ファイルを行単位で読み込む方法がありません。一方、BufferedReaderはファイルを1行ずつ読み込むための優れたAPIを提供していますが、BufferedReader documentationはFSキャッシュにファイルを置くことについての注意がありません。BufferedReaderおよびファイルシステムキャッシュ

BufferedReader最初に読み込んだ後にファイルをFSキャッシュに入れるのに賢明ですか?

+0

ドキュメントにヒントがない場合は、キャッシュを使用しません。 – Jens

+3

マニュアルでFSキャッシュに手動で置くことができるドキュメントがどこにないのですか?私はあなたがFSキャッシュにファイルを置くために使用できるAPIがないと思う、ファイルがFSキャッシュに置かれるまで、ファイルが常に読み込まれ、読み取り専用であれば、それは通常fsキャッシュ、FSキャッシュメモリは、jvmではなく、OSで利用できるメモリなので、FSキャッシュの恩恵を受けるには、OS用のRAMもいくつか残して、使用可能なRAMをJVMにすべて渡さないようにします。読み取り操作を高速化します。 – Elbek

+0

@Elbek右、「手動でファイルをFSキャッシュに入れる」というのは、APIがあることを意味し、何かをFSキャッシュに入れるかどうかを指定します。 –

答えて

2

あなたはFileChannelからBufferedReaderを作成することはできませんが、あなたはそれはあなたが探しているものにあなたが近づくかどうかを確認するために、以下を試しできます

File file = ...; 
long pos = 0; 
long size = file.length(); 
FileInputStream fis = new FileInputStream(file); 
FileChannel fc = fis.getChannel(); 
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, pos, size); 
BufferedReader br = new BufferedReader(new InputStreamReader(fis)); 

しかし、その保証はありませんFileInputStreamMappedByteBufferにマップされたメモリから読み込みます。そうであれば、別のオペレーティングシステム上にないかもしれません。 YMMV。