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로 이어질 것이라고 생각하기 때문입니다.AsynchronousFileChannel은 큰 파일을 어떻게 읽을 수 있습니까?
누군가 샘플 코드를 제공 할 수 있습니까? 감사합니다.
ps : java.io.BufferedReader.read()의 반환 값을 확인할 수 있으므로 JIO로 큰 파일을 루프로 읽을 수 있습니다. 그러나 NIO2를 사용하는 방법을 알지 못합니다.
나는 다른 읽기를 시작하지만 여전히 처음 1000 바이트를 읽습니다. –
저에게 맞습니다. 물론 버퍼를 지우고 읽음에서 position 매개 변수를 증가시켜야하므로 최종 변수로 약간의 혼란이 있지만 그렇게 할 수 있습니다. – EJP
@downvoter 설명해주십시오. – EJP