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。
能否有人给我提供样例代码呢?谢谢。
补充:我可以使用 JIO 循环读取大文件,因为我可以检查 java.io.BufferedReader.read() 的返回值。但我不知道如何使用 NIO2。