Что делать, если мы превышаем емкость выделения буфера в классе пакетов NIO ByteBuffer.allocate(48) в Java

 file = new RandomAccessFile("xanadu.txt", "rw");
        FileChannel channel = file.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(48);
        int byteReads = channel.read(buffer);

Так что я выделяю 48 в качестве емкости в буфере. Теперь рассмотрим, что txt-файл, который я читаю, имеет размер около 10 МБ, поэтому логически он пересекает размер буфера. Но когда мы попытаемся прочитать, мы сможем прочитать все содержимое файла, независимо от его размера. ТАК, как это возможно.

Я новичок в этой области потоковой передачи, поэтому, возможно, мой вопрос кажется очень простым.

1 ответ

Решение

read вызов просто не прочитает более 48 байтов.

Ничего не переполнится, вам просто нужно позвонить read несколько раз, пока вы не прочитаете все данные, которые вы ожидаете.

Это указано в ReadableByteChannel интерфейсные документы:

Читает последовательность байтов из этого канала в данный буфер.

Предпринята попытка прочитать до r байтов из канала, где r - это количество байтов, оставшихся в буфере, то есть dst.remaining(), на момент вызова этого метода.

Вам нужно clear() буфер после обработки его содержимого перед передачей обратно read,

Другие вопросы по тегам