Spec-Zone.ru › OpenJDK 8

Класс Buffer

  • java.lang.Object
    • java.nio.Buffer
Прямые известные подклассы:
ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer

public abstract class Buffer
extends Object

Контейнер для данных определенного примитивного типа.

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

Емкость буфера — количество элементов, которое он содержит. Емкость буфера никогда не отрицательная и никогда не меняется.

Предел буфера — индекс первого элемента, который не должен читаться или записываться. Предел буфера никогда не отрицательный и никогда не превышает его емкость.

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

Для каждого примитивного типа (кроме boolean) существует по одному подклассу этого класса.

Передача данных

Каждый подкласс этого класса определяет две категории операций get и put:

Относительные операции считывают или записывают один или несколько элементов, начиная с текущего положения, и затем увеличивают положение на количество переданных элементов. Если запрашиваемая передача превышает предел, то относительная операция get выбрасывает исключение BufferUnderflowException, а относительная операция put — исключение BufferOverflowException; в любом случае данные не передаются.

Абсолютные операции принимают явный индекс элемента и не влияют на положение. Абсолютные операции get и put выбрасывают исключение IndexOutOfBoundsException, если аргумент индекса превышает предел.

Данные также могут, конечно, передаваться в буфер или из буфера с помощью операций ввода-вывода соответствующего канала, которые всегда относительны к текущему положению.

Пометка и сброс

Пометка буфера — это индекс, к которому его положение будет сброшено при вызове метода reset. Пометка не всегда определена, но когда она определена, она никогда не отрицательная и никогда не превышает положение. Если пометка определена, то она отбрасывается, когда положение или предел изменяются на значение, меньшее пометки. Если пометка не определена, вызов метода reset приводит к сбросу исключения InvalidMarkException.

Инварианты

Для значений пометки, положения, предела и емкости выполняется следующий инвариант:

0 <= mark <= position <= limit <= capacity

Новый буфер всегда имеет положение 0 и неопределенную пометку. Начальный предел может быть 0 или иметь какое-либо другое значение, зависящее от типа буфера и способа его создания. Каждый элемент только что выделенного буфера инициализируется нулем.

Очистка, переворот и сброс

В дополнение к методам доступа к значению положения, предела и емкости, а также к пометке и сбросу, этот класс также определяет следующие операции над буферами:

  • clear() делает буфер готовым к новой последовательности операций чтения канала или относительных операций put: он устанавливает предел на емкость и положение на ноль.

  • flip() делает буфер готовым к новой последовательности операций записи канала или относительных операций get: он устанавливает предел на текущее положение, а затем устанавливает положение на ноль.

  • rewind() делает буфер готовым к повторному считыванию уже содержащихся данных: он оставляет предел неизменным и устанавливает положение на ноль.

Буферы только для чтения

Каждый буфер читаем, но не каждый буфер записывается. Методы изменения каждого класса буфера определены как необязательные операции, которые будут выбрасывать исключение ReadOnlyBufferException при вызове на буфере только для чтения. Буфер только для чтения не позволяет изменять его содержимое, но его значения пометки, положения и предела изменяемы. Можно определить, является ли буфер только для чтения, вызвав метод isReadOnly.

Безопасность потоков

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

Цепочки вызовов

Методы в этом классе, у которых нет возвращаемого значения, по спецификации возвращают буфер, на котором они вызываются. Это позволяет создавать цепочки вызовов; например, последовательность операторов

b.flip();
b.position(23);
b.limit(42);
может быть заменена одним более компактным оператором
b.flip().position(23).limit(42);
С момента:
1.4

Методы

Модификатор и тип Метод и описание
abstract Object array()

Возвращает массив, который поддерживает этот буфер (необязательная операция).

abstract int arrayOffset()

Возвращает смещение в массиве, поддерживающем этот буфер, первого элемента буфера (необязательная операция).

int capacity()

Возвращает емкость этого буфера.

Buffer clear()

Очищает этот буфер.

Buffer flip()

Переворачивает этот буфер.

abstract boolean hasArray()

Указывает, поддерживается ли этот буфер доступным массивом.

boolean hasRemaining()

Указывает, существуют ли элементы между текущим положением и пределом.

abstract boolean isDirect()

Указывает, является ли этот буфер прямым.

abstract boolean isReadOnly()

Указывает, является ли этот буфер только для чтения.

int limit()

Возвращает предел этого буфера.

Buffer limit(int newLimit)

Устанавливает предел этого буфера.

Buffer mark()

Устанавливает пометку этого буфера в его текущем положении.

int position()

Возвращает положение этого буфера.

Buffer position(int newPosition)

Устанавливает положение этого буфера.

int remaining()

Возвращает количество элементов между текущим положением и пределом.

Buffer reset()

Сбрасывает положение этого буфера до ранее помеченного положения.

Buffer rewind()

Сбрасывает этот буфер.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы

capacity

public final int capacity()

Возвращает емкость этого буфера.

Возвращает:
Емкость этого буфера

position

public final int position()

Возвращает текущую позицию этого буфера.

Возвращает:
Позицию этого буфера

position

public final Buffer position(int newPosition)

Устанавливает позицию этого буфера. Если метка определена и больше новой позиции, она отбрасывается.

Параметры:
newPosition - Новое значение позиции; должно быть неотрицательным и не больше текущего предела
Возвращает:
Этот буфер
Выбрасывает:
IllegalArgumentException - Если условия на newPosition не выполнены

limit

public final int limit()

Возвращает предел этого буфера.

Возвращает:
Предел этого буфера

limit

public final Buffer limit(int newLimit)

Устанавливает предел этого буфера. Если позиция больше нового предела, она устанавливается равной новому пределу. Если метка определена и больше нового предела, она отбрасывается.

Параметры:
newLimit - Новое значение предела; должно быть неотрицательным и не больше емкости этого буфера
Возвращает:
Этот буфер
Выбрасывает:
IllegalArgumentException - Если условия на newLimit не выполнены

mark

public final Buffer mark()

Устанавливает метку этого буфера в его текущей позиции.

Возвращает:
Этот буфер

reset

public final Buffer reset()

Возвращает позицию этого буфера к ранее установленной метке.

Вызов этого метода не изменяет и не отбрасывает значение метки.

Возвращает:
Этот буфер
Выбрасывает:
InvalidMarkException - Если метка не была установлена

clear

public final Buffer clear()

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

Вызывайте этот метод перед использованием последовательности операций чтения канала или операций put для заполнения этого буфера. Например:

buf.clear();     // Prepare buffer for reading
in.read(buf);    // Read data

Этот метод фактически не стирает данные в буфере, но он назван так, как будто он это делает, потому что чаще всего используется в ситуациях, в которых это и так происходит.

Возвращает:
Этот буфер

flip

public final Buffer flip()

Переворачивает этот буфер. Предел устанавливается в текущую позицию, а затем позиция устанавливается в ноль. Если метка определена, она отбрасывается.

После последовательности операций чтения канала или операций put, вызывайте этот метод, чтобы подготовиться к последовательности операций записи в канал или относительных операций get. Например:

buf.put(magic);    // Prepend header
in.read(buf);      // Read data into rest of buffer
buf.flip();        // Flip buffer
out.write(buf);    // Write header + data to channel

Этот метод часто используется в сочетании с методом compact при передаче данных из одного места в другое.

Возвращает:
Этот буфер

rewind

public final Buffer rewind()

Возвращает этот буфер в начальное состояние. Позиция устанавливается в ноль, а метка отбрасывается.

Вызывайте этот метод перед последовательностью операций записи в канал или операций get, предполагая, что предел уже установлен соответствующим образом. Например:

out.write(buf);    // Write remaining data
buf.rewind();      // Rewind buffer
buf.get(array);    // Copy data into array
Возвращает:
Этот буфер

remaining

public final int remaining()

Возвращает количество элементов между текущей позицией и пределом.

Возвращает:
Количество элементов, оставшихся в этом буфере

hasRemaining

public final boolean hasRemaining()

Определяет, есть ли элементы между текущей позицией и пределом.

Возвращает:
true если и только если в этом буфере есть как минимум один оставшийся элемент

isReadOnly

public abstract boolean isReadOnly()

Определяет, является ли этот буфер только для чтения.

Возвращает:
true если и только если этот буфер является только для чтения

hasArray

public abstract boolean hasArray()

Определяет, поддерживается ли этот буфер доступным массивом.

Если этот метод возвращает true , то методы array и arrayOffset могут быть безопасно вызваны.

Возвращает:
true если и только если этот буфер поддерживается массивом и не является только для чтения
С:
1.6

array

public abstract Object array()

Возвращает массив, поддерживающий этот буфер (необязательная операция).

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

Изменения в содержимом этого буфера приведут к изменению содержимого возвращаемого массива, и наоборот.

Вызовите метод hasArray перед вызовом этого метода, чтобы убедиться, что этот буфер поддерживается доступным массивом.

Возвращает:
Массив, поддерживающий этот буфер
Выбрасывает:
ReadOnlyBufferException - Если этот буфер поддерживается массивом, но является только для чтения
UnsupportedOperationException - Если этот буфер не поддерживается доступным массивом
С:
1.6

arrayOffset

public abstract int arrayOffset()

Возвращает смещение в поддерживающем массив этого буфера первого элемента буфера (необязательная операция).

Если этот буфер поддерживается массивом, то позиция буфера p соответствует индексу массива p + arrayOffset().

Вызовите метод hasArray перед вызовом этого метода, чтобы убедиться, что этот буфер поддерживается доступным массивом.

Возвращает:
Смещение в массиве буфера первого элемента буфера
Выбрасывает:
ReadOnlyBufferException - Если этот буфер поддерживается массивом, но является только для чтения
UnsupportedOperationException - Если этот буфер не поддерживается доступным массивом
С:
1.6

isDirect

public abstract boolean isDirect()

Определяет, является ли этот буфер прямым.

Возвращает:
true если и только если этот буфер прямой
С:
1.6

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API