Учебники

Java NIO — буфер

Буферы в Java NIO можно рассматривать как простой объект, который действует как контейнер с фиксированным размером блоков данных, которые можно использовать для записи данных в канал или чтения данных из канала, чтобы буферы действовали как конечные точки для каналов.

Он предоставляет набор методов, которые делают более удобным обращение с блоком памяти для чтения и записи данных в и из каналов.

Буферы делают пакет NIO более эффективным и быстрым по сравнению с классическим вводом-выводом, поскольку в случае ввода-вывода данные обрабатываются в виде потоков, которые не поддерживают асинхронный и параллельный поток данных. Также ввод-вывод не позволяет выполнять данные в чанке или группе байтов. ,

Основные параметры, которые определяют буфер Java NIO, могут быть определены как —

  • Capacity — максимальный объем данных / байт, который может быть сохранен в Buffer. Емкость буфера не может быть изменена. Как только буфер заполнен, его следует очистить перед записью в него.

  • Лимит — Лимит имеет значение в соответствии с режимом Буфера, т.е. в режиме записи Буфера Лимит равен емкости, что означает, что максимальное количество данных, которые могут быть записаны в буфер. В то время как в режиме чтения буфера Лимит означает предел того, сколько данных может быть прочитанным из буфера.

  • Положение — указывает на текущее положение курсора в буфере. Первоначально устанавливается в 0 в момент создания буфера или, другими словами, это индекс следующего элемента, который должен быть прочитан или записан, который автоматически обновляется get () и помещается () методы.

  • Отметить — отметить закладку позиции в буфере. При вызове метода mark () записывается текущая позиция, а при вызове reset () отмеченная позиция восстанавливается.

Capacity — максимальный объем данных / байт, который может быть сохранен в Buffer. Емкость буфера не может быть изменена. Как только буфер заполнен, его следует очистить перед записью в него.

Лимит — Лимит имеет значение в соответствии с режимом Буфера, т.е. в режиме записи Буфера Лимит равен емкости, что означает, что максимальное количество данных, которые могут быть записаны в буфер. В то время как в режиме чтения буфера Лимит означает предел того, сколько данных может быть прочитанным из буфера.

Положение — указывает на текущее положение курсора в буфере. Первоначально устанавливается в 0 в момент создания буфера или, другими словами, это индекс следующего элемента, который должен быть прочитан или записан, который автоматически обновляется get () и помещается () методы.

Отметить — отметить закладку позиции в буфере. При вызове метода mark () записывается текущая позиция, а при вызове reset () отмеченная позиция восстанавливается.

Тип буфера

Буферы Java NIO могут быть классифицированы в следующих вариантах на основе типов данных, с которыми имеет дело буфер —

  • ByteBuffer
  • MappedByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

Важные методы буфера

Как уже упоминалось, что Buffer действует как объект памяти, который предоставляет набор методов, которые делают более удобным работу с блоком памяти. Ниже приведены важные методы Buffer —

  • allocate (intacity) — Этот метод используется для выделения нового буфера с емкостью в качестве параметра. Метод Allocate выдает исключение IllegalArgumentException в случае, если переданная емкость является отрицательным целым числом.

  • read () и put () — метод чтения канала используется для записи данных из канала в буфер, а put — метод буфера, который используется для записи данных в буфер.

  • flip () — Метод flip переключает режим буфера с режима записи на режим чтения. Он также устанавливает позицию обратно в 0 и устанавливает предел, в котором позиция была во время записи.

  • write () и get () — метод записи канала используется для записи данных из буфера в канал, в то время как get является методом буфера, который используется для чтения данных из буфера.

  • rewind () — метод перемотки используется, когда требуется перечитывание, так как он устанавливает позицию в ноль и не изменяет значение лимита.

  • clear () и compact () — clear и compact оба метода используются для перехода из режима чтения в режим записи. Метод clear () устанавливает позицию в ноль и ограничивает ее до емкости, в этом методе данные в буфере не очищаются, только маркеры инициализируются повторно.

    С другой стороны, метод compact () используется, когда осталось несколько непрочитанных данных, и все же мы используем режим записи буфера, в этом случае компактный метод копирует все непрочитанные данные в начало буфера и устанавливает положение сразу после последнего непрочитанного элемента. Свойство limit все еще установлено в емкость.

  • mark () и reset () — Как следует из названия, метод mark используется для пометки какой-либо конкретной позиции в буфере, в то время как сброс делает положение обратно в отмеченную позицию.

allocate (intacity) — Этот метод используется для выделения нового буфера с емкостью в качестве параметра. Метод Allocate выдает исключение IllegalArgumentException в случае, если переданная емкость является отрицательным целым числом.

read () и put () — метод чтения канала используется для записи данных из канала в буфер, а put — метод буфера, который используется для записи данных в буфер.

flip () — Метод flip переключает режим буфера с режима записи на режим чтения. Он также устанавливает позицию обратно в 0 и устанавливает предел, в котором позиция была во время записи.

write () и get () — метод записи канала используется для записи данных из буфера в канал, в то время как get является методом буфера, который используется для чтения данных из буфера.

rewind () — метод перемотки используется, когда требуется перечитывание, так как он устанавливает позицию в ноль и не изменяет значение лимита.

clear () и compact () — clear и compact оба метода используются для перехода из режима чтения в режим записи. Метод clear () устанавливает позицию в ноль и ограничивает ее до емкости, в этом методе данные в буфере не очищаются, только маркеры инициализируются повторно.

С другой стороны, метод compact () используется, когда осталось несколько непрочитанных данных, и все же мы используем режим записи буфера, в этом случае компактный метод копирует все непрочитанные данные в начало буфера и устанавливает положение сразу после последнего непрочитанного элемента. Свойство limit все еще установлено в емкость.

mark () и reset () — Как следует из названия, метод mark используется для пометки какой-либо конкретной позиции в буфере, в то время как сброс делает положение обратно в отмеченную позицию.

пример

В следующем примере показана реализация определенных выше методов.