Что делать, если мы превышаем емкость выделения буфера в классе пакетов 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
,