Проблема в том, что вы забыли сбросить лимит и позицию буфера после внутреннего цикла while
.После того, как вы прочитаете первые 1024 символа, буфер будет заполнен, и каждая попытка чтения в буфер будет пытаться прочитать до remaining = limit - position
байтов, то есть 0 байтов после заполнения буфера.
Кроме того, вы всегда должны захватывать возвращаемое значение из fileChannel.read()
.В вашем случае вам будет сказано, что он непрерывно возвращает 0
.
Вызов byteBuffer.clear()
после того, как внутренний цикл решит проблему:
public static void main(String[] args) throws IOException {
FileChannel fileChannel = FileChannel.open(Paths.get("JPPFConfiguration.txt"), StandardOpenOption.READ, StandardOpenOption.WRITE);
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
int n;
long sum = 0L;
while ((n = fileChannel.read(byteBuffer)) != -1) {
sum += n;
byteBuffer.flip();
while (byteBuffer.hasRemaining()) {
char c = (char) byteBuffer.get();
System.out.print(c);
}
System.out.println("\n read " + n + " bytes");
byteBuffer.clear();
}
System.out.println("read " + sum + " bytes total");
}