Буферы в 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 используется для пометки какой-либо конкретной позиции в буфере, в то время как сброс делает положение обратно в отмеченную позицию.
пример
В следующем примере показана реализация определенных выше методов.