Path file = Paths.get("c:/large.log");
AsynchronousFileChannel channel = AsynchronousFileChannel.open(file);
final ByteBuffer buffer = ByteBuffer.allocate(1000);
channel.read(buffer, 0, buffer,
new CompletionHandler<Integer, ByteBuffer>() {
public void completed(Integer result, ByteBuffer attachment) {
System.out.println(new String(buffer.array()));
}
});
このようにして、large.log から最初の 1000 バイトを読み取ることができます。ByteBuffer.allocate(1000*1000) のような大きなバイト配列を割り当てたくない場合、次のログを読むにはどうすればよいですか。これは OutOfMemory につながると思うからです。
誰かがサンプルコードを教えてくれますか? ありがとう。
ps:java.io.BufferedReader.read()の戻り値を確認できるので、JIOで大きなファイルをループ読みできます。しかし、NIO2 の扱い方がわかりません。