Spec-Zone.ru › OpenJDK 25

Класс ByteBuffer

java.lang.Object
java.nio.Buffer
java.nio.ByteBuffer
Все реализованные интерфейсы:
Comparable<ByteBuffer>
Прямые известные подклассы:
MappedByteBuffer
public abstract sealed class ByteBuffer extends Buffer implements Comparable<ByteBuffer> permits MappedByteBuffer (not exhaustive)
Байтовый буфер.

Этот класс определяет шесть категорий операций с байтовыми буферами:

  • Абсолютные и относительные методы get и put, которые считывают и записывают отдельные байты;

  • Абсолютные и относительные методы bulk get, которые передают непрерывные последовательности байтов из этого буфера в массив;

  • Абсолютные и относительные методы bulk put, которые передают непрерывные последовательности байтов из массива байтов или другого байтового буфера в этот буфер;

  • Абсолютные и относительные методы get и put, которые считывают и записывают значения других примитивных типов, преобразуя их в последовательности байтов и обратно в соответствии с определённым порядком байтов;

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

  • Метод для compacting байтового буфера.

Байтовые буферы можно создавать с помощью метода allocation, который выделяет место для содержимого буфера, либо путём wrapping существующего массива байтов в буфер.

Прямые и непрямые буферы

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

Прямой байтовый буфер можно создать, вызвав фабричный метод allocateDirect этого класса. Как правило, выделение и освобождение буферов, возвращаемых этим методом, обходится несколько дороже, чем для непрямых буферов. Содержимое прямых буферов может находиться вне обычной кучи, управляемой сборщиком мусора, поэтому их влияние на объём памяти, используемой приложением, может быть неочевидным. Поэтому рекомендуется выделять прямые буферы преимущественно для больших буферов с длительным сроком службы, участвующих в базовых операциях ввода-вывода системы. В целом прямые буферы следует выделять только тогда, когда они обеспечивают измеримый прирост производительности программы.

Прямой байтовый буфер также можно создать, mapping область файла непосредственно в память. Реализация платформы Java может дополнительно поддерживать создание прямых байтовых буферов из собственного кода через JNI. Если экземпляр буфера одного из этих видов ссылается на недоступную область памяти, попытка обратиться к этой области не изменит содержимое буфера и приведёт к выбросу исключения, вид которого не определён: либо в момент обращения, либо позднее.

Определить, является ли байтовый буфер прямым или непрямым, можно, вызвав его метод isDirect. Этот метод предоставлен для явного управления буферами в коде, критичном к производительности.

Доступ к двоичным данным

Этот класс определяет методы для чтения и записи значений всех остальных примитивных типов, кроме boolean. Примитивные значения преобразуются в последовательности байтов или обратно в соответствии с текущим порядком байтов буфера, который можно получить и изменить с помощью методов order. Порядки байтов представлены экземплярами класса ByteOrder. Начальный порядок байтов буфера всегда BIG_ENDIAN.

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

    float      getFloat()
    float      getFloat(int index)
    ByteBuffer putFloat(float f)
    ByteBuffer putFloat(int index, float f)

Соответствующие методы определены для типов char, short, int, long и double. Индексы в параметрах абсолютных методов get и put задаются в байтах, а не в единицах типа, который считывается или записывается.

Для доступа к однородным двоичным данным, то есть последовательностям значений одного типа, этот класс определяет методы, создающие представления заданного байтового буфера. Буфер-представление — это просто другой буфер, содержимое которого хранится в байтовом буфере. Изменения содержимого байтового буфера будут видны в буфере-представлении, и наоборот; значения позиции, предела и отметки у двух буферов независимы. Например, метод asFloatBuffer создаёт экземпляр класса FloatBuffer, данные которого хранятся в байтовом буфере, для которого вызван этот метод. Соответствующие методы создания представлений определены для типов char, short, int, long и double.

Буферы-представления имеют три важных преимущества перед описанными выше наборами типизированных методов get и put:

  • Индексация буфера-представления выполняется не в байтах, а в единицах размера значений соответствующего типа;

  • Буфер-представление предоставляет относительные методы группового чтения get и записи put, которые могут передавать непрерывные последовательности значений между буфером и массивом или другим буфером того же типа; и

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

Порядок байтов буфера-представления фиксируется согласно порядку байтов его байтового буфера на момент создания представления.

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

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

    bb.putInt(0xCAFEBABE);
    bb.putShort(3);
    bb.putShort(45);
можно заменить одной инструкцией
    bb.putInt(0xCAFEBABE).putShort(3).putShort(45);

Необязательные операции

Методы, определённые как необязательные операции, при вызове для ByteBuffer, доступного только для чтения, выбрасывают исключение ReadOnlyBufferException. Методы array и arrayOffset выбрасывают исключение UnsupportedOperationException, если ByteBuffer не поддерживается доступным массивом байтов (независимо от того, доступен ли ByteBuffer только для чтения).
Граф иерархии запечатанных классов:
Sealed class hierarchy graph for ByteBufferSealed class hierarchy graph for ByteBuffer
Начиная с версии:
1.4

Краткое описание методов

Модификатор и тип Метод Описание
final ByteBuffer alignedSlice(int unitSize)
Создаёт новый байтовый буфер, содержимое которого представляет собой общую выровненную подпоследовательность содержимого этого буфера.
final int alignmentOffset(int index, int unitSize)
Возвращает адрес памяти, указывающий на байт по заданному индексу, по модулю заданного размера единицы.
static ByteBuffer allocate(int capacity)
Выделяет новый байтовый буфер.
static ByteBuffer allocateDirect(int capacity)
Выделяет новый прямой байтовый буфер.
final byte[] array()
Возвращает массив байтов, на основе которого создан этот буфер (необязательная операция).
final int arrayOffset()
Возвращает смещение первого элемента буфера относительно массива, на основе которого создан этот буфер (необязательная операция).
abstract CharBuffer asCharBuffer()
Создаёт представление этого байтового буфера в виде буфера char.
abstract DoubleBuffer asDoubleBuffer()
Создаёт представление этого байтового буфера в виде буфера double.
abstract FloatBuffer asFloatBuffer()
Создаёт представление этого байтового буфера в виде буфера float.
abstract IntBuffer asIntBuffer()
Создаёт представление этого байтового буфера в виде буфера int.
abstract LongBuffer asLongBuffer()
Создаёт представление этого байтового буфера в виде буфера long.
abstract ByteBuffer asReadOnlyBuffer()
Создаёт новый байтовый буфер только для чтения, совместно использующий содержимое этого буфера.
abstract ShortBuffer asShortBuffer()
Создаёт представление этого байтового буфера в виде буфера short.
ByteBuffer clear()
Очищает этот буфер.
abstract ByteBuffer compact()
Уплотняет этот буфер (необязательная операция).
int compareTo(ByteBuffer that)
Сравнивает этот буфер с другим.
abstract ByteBuffer duplicate()
Создаёт новый байтовый буфер, совместно использующий содержимое этого буфера.
boolean equals(Object ob)
Определяет, равен ли этот буфер другому объекту.
ByteBuffer flip()
Переворачивает этот буфер.
abstract byte get()
Относительный метод get.
ByteBuffer get(byte[] dst)
Относительный метод группового чтения get.
ByteBuffer get(byte[] dst, int offset, int length)
Относительный метод группового чтения get.
abstract byte get(int index)
Абсолютный метод get.
ByteBuffer get(int index, byte[] dst)
Абсолютный метод группового чтения get.
ByteBuffer get(int index, byte[] dst, int offset, int length)
Абсолютный метод группового чтения get.
abstract char getChar()
Относительный метод get для чтения значения char.
abstract char getChar(int index)
Абсолютный метод get для чтения значения char.
abstract double getDouble()
Относительный метод get для чтения значения double.
abstract double getDouble(int index)
Абсолютный метод get для чтения значения double.
abstract float getFloat()
Относительный метод get для чтения значения float.
abstract float getFloat(int index)
Абсолютный метод get для чтения значения float.
abstract int getInt()
Относительный метод get для чтения значения int.
abstract int getInt(int index)
Абсолютный метод get для чтения значения int.
abstract long getLong()
Относительный метод get для чтения значения long.
abstract long getLong(int index)
Абсолютный метод get для чтения значения long.
abstract short getShort()
Относительный метод get для чтения значения short.
abstract short getShort(int index)
Абсолютный метод get для чтения значения short.
final boolean hasArray()
Определяет, поддерживается ли этот буфер доступным массивом байтов.
int hashCode()
Возвращает текущий хеш-код этого буфера.
abstract boolean isDirect()
Определяет, является ли этот байтовый буфер прямым.
ByteBuffer limit(int newLimit)
Устанавливает предел этого буфера.
ByteBuffer mark()
Устанавливает отметку этого буфера в текущей позиции.
int mismatch(ByteBuffer that)
Находит и возвращает относительный индекс первого несовпадения между этим буфером и заданным буфером.
final ByteOrder order()
Возвращает порядок байтов этого буфера.
final ByteBuffer order(ByteOrder bo)
Изменяет порядок байтов этого буфера.
ByteBuffer position(int newPosition)
Устанавливает позицию этого буфера.
abstract ByteBuffer put(byte b)
Относительный метод put (необязательная операция).
final ByteBuffer put(byte[] src)
Относительный метод групповой записи put (необязательная операция).
ByteBuffer put(byte[] src, int offset, int length)
Относительный метод групповой записи put (необязательная операция).
abstract ByteBuffer put(int index, byte b)
Абсолютный метод put (необязательная операция).
ByteBuffer put(int index, byte[] src)
Абсолютный метод групповой записи put (необязательная операция).
ByteBuffer put(int index, byte[] src, int offset, int length)
Абсолютный метод групповой записи put (необязательная операция).
ByteBuffer put(int index, ByteBuffer src, int offset, int length)
Абсолютный метод групповой записи put (необязательная операция).
ByteBuffer put(ByteBuffer src)
Относительный метод групповой записи put (необязательная операция).
abstract ByteBuffer putChar(char value)
Относительный метод put для записи значения char (необязательная операция).
abstract ByteBuffer putChar(int index, char value)
Абсолютный метод put для записи значения char (необязательная операция).
abstract ByteBuffer putDouble(double value)
Относительный метод put для записи значения double (необязательная операция).
abstract ByteBuffer putDouble(int index, double value)
Абсолютный метод put для записи значения double (необязательная операция).
abstract ByteBuffer putFloat(float value)
Относительный метод put для записи значения float (необязательная операция).
abstract ByteBuffer putFloat(int index, float value)
Абсолютный метод put для записи значения float (необязательная операция).
abstract ByteBuffer putInt(int value)
Относительный метод put для записи значения int (необязательная операция).
abstract ByteBuffer putInt(int index, int value)
Абсолютный метод put для записи значения int (необязательная операция).
abstract ByteBuffer putLong(int index, long value)
Абсолютный метод put для записи значения long (необязательная операция).
abstract ByteBuffer putLong(long value)
Относительный метод put для записи значения long (необязательная операция).
abstract ByteBuffer putShort(int index, short value)
Абсолютный метод put для записи значения short (необязательная операция).
abstract ByteBuffer putShort(short value)
Относительный метод put для записи значения short (необязательная операция).
ByteBuffer reset()
Возвращает позицию этого буфера к ранее отмеченной позиции.
ByteBuffer rewind()
Перематывает этот буфер в начало.
abstract ByteBuffer slice()
Создаёт новый байтовый буфер, содержимое которого представляет собой общую подпоследовательность содержимого этого буфера.
abstract ByteBuffer slice(int index, int length)
Создаёт новый байтовый буфер, содержимое которого представляет собой общую подпоследовательность содержимого этого буфера.
String toString()
Возвращает строку с описанием состояния этого буфера.
static ByteBuffer wrap(byte[] array)
Оборачивает массив байтов в буфер.
static ByteBuffer wrap(byte[] array, int offset, int length)
Оборачивает массив байтов в буфер.

Методы, объявленные в классе Buffer

capacity, hasRemaining, isReadOnly, limit, position, remaining

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание методов

allocateDirect

public static ByteBuffer allocateDirect(int capacity)
Выделяет новый буфер байтов прямого доступа.

Позиция нового буфера будет равна нулю, его предел будет равен его ёмкости, его отметка будет не определена, каждый его элемент будет инициализирован нулём, а порядок байтов будет BIG_ENDIAN. Наличие у него backing array не определено.

Параметры:
capacity — ёмкость нового буфера в байтах
Возвращает:
Новый буфер байтов
Исключения:
IllegalArgumentException — если capacity является отрицательным целым числом

allocate

public static ByteBuffer allocate(int capacity)
Выделяет новый буфер байтов.

Позиция нового буфера будет равна нулю, его предел будет равен его ёмкости, его отметка будет не определена, каждый его элемент будет инициализирован нулём, а порядок байтов будет BIG_ENDIAN. У него будет backing array, а его array offset будет равен нулю.

Параметры:
capacity — ёмкость нового буфера в байтах
Возвращает:
Новый буфер байтов
Исключения:
IllegalArgumentException — если capacity является отрицательным целым числом

wrap

public static ByteBuffer wrap(byte[] array, int offset, int length)
Оборачивает массив байтов в буфер.

Новый буфер будет использовать указанный массив байтов в качестве хранилища; то есть изменения в буфере будут приводить к изменению массива, и наоборот. Ёмкость нового буфера будет равна array.length, его позиция будет равна offset, его предел будет равен offset + length, его отметка будет не определена, а порядок байтов будет BIG_ENDIAN. Его backing array будет указанным массивом, а его array offset будет равен нулю.

Параметры:
array — массив, который будет служить хранилищем нового буфера
offset — смещение используемого подмассива; должно быть неотрицательным и не превышать array.length. Позиция нового буфера будет установлена в это значение.
length — длина используемого подмассива; должна быть неотрицательной и не превышать array.length - offset. Предел нового буфера будет установлен в offset + length.
Возвращает:
Новый буфер байтов
Исключения:
IndexOutOfBoundsException — если предварительные условия для параметров offset и length не выполняются

wrap

public static ByteBuffer wrap(byte[] array)
Оборачивает массив байтов в буфер.

Новый буфер будет использовать указанный массив байтов в качестве хранилища; то есть изменения в буфере будут приводить к изменению массива, и наоборот. Ёмкость и предел нового буфера будут равны array.length, его позиция будет равна нулю, его отметка будет не определена, а порядок байтов будет BIG_ENDIAN. Его backing array будет указанным массивом, а его array offset будет равен нулю.

Параметры:
array — массив, который будет служить хранилищем этого буфера
Возвращает:
Новый буфер байтов

slice

public abstract ByteBuffer slice()
Создаёт новый буфер байтов, содержимое которого является общей подпоследовательностью содержимого этого буфера.

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

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

Определено в:
slice в классе Buffer
Возвращает:
Новый буфер байтов
См. также:
  • alignedSlice(int)

slice

public abstract ByteBuffer slice(int index, int length)
Создаёт новый буфер байтов, содержимое которого является общей подпоследовательностью содержимого этого буфера.

Содержимое нового буфера будет начинаться с позиции index в этом буфере и будет содержать length элементов. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и отметки двух буферов будут независимыми.

Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны length, его отметка будет не определена, а порядок байтов будет BIG_ENDIAN. Новый буфер будет буфером прямого доступа тогда и только тогда, когда таким является этот буфер, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.

Определено в:
slice в классе Buffer
Параметры:
index — позиция в этом буфере, с которой будет начинаться содержимое нового буфера; должна быть неотрицательной и не превышать limit()
length — количество элементов, которое будет содержать новый буфер; должно быть неотрицательным и не превышать limit() - index
Возвращает:
Новый буфер
Исключения:
IndexOutOfBoundsException — если index отрицательно или больше limit(), length отрицательно или length > limit() - index
Начиная с версии:
13

duplicate

public abstract ByteBuffer duplicate()
Создаёт новый буфер байтов, использующий общее содержимое с этим буфером.

Содержимое нового буфера будет таким же, как у этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и отметки двух буферов будут независимыми.

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

Определено в:
duplicate в классе Buffer
Возвращает:
Новый буфер байтов

asReadOnlyBuffer

public abstract ByteBuffer asReadOnlyBuffer()
Создаёт новый буфер байтов, доступный только для чтения и использующий общее содержимое с этим буфером.

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

Значения ёмкости, предела, позиции и отметки нового буфера будут идентичны соответствующим значениям этого буфера, а его порядок байтов будет BIG_ENDIAN.

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

Возвращает:
Новый буфер байтов, доступный только для чтения

get

public abstract byte get()
Относительный метод get. Считывает байт в текущей позиции буфера, а затем увеличивает позицию.
Возвращает:
Байт в текущей позиции буфера
Исключения:
BufferUnderflowException — если текущая позиция буфера не меньше его предела

put

public abstract ByteBuffer put(byte b)
Относительный метод put (необязательная операция).

Записывает указанный байт в этот буфер в текущей позиции, а затем увеличивает позицию.

Параметры:
b — записываемый байт
Возвращает:
Этот буфер
Исключения:
BufferOverflowException — если текущая позиция этого буфера не меньше его предела
ReadOnlyBufferException — если этот буфер доступен только для чтения

get

public abstract byte get(int index)
Абсолютный метод get. Считывает байт по указанному индексу.
Параметры:
index — индекс, по которому будет считан байт
Возвращает:
Байт по указанному индексу
Исключения:
IndexOutOfBoundsException — если index отрицательно или не меньше предела буфера

put

public abstract ByteBuffer put(int index, byte b)
Абсолютный метод put (необязательная операция).

Записывает указанный байт в этот буфер по указанному индексу.

Параметры:
index — индекс, по которому будет записан байт
b — записываемое значение байта
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException — если index отрицательно или не меньше предела буфера
ReadOnlyBufferException — если этот буфер доступен только для чтения

get

public ByteBuffer get(byte[] dst, int offset, int length)
Относительный метод get для чтения блока данных.

Этот метод переносит байты из этого буфера в указанный массив-приёмник. Если в буфере осталось меньше байтов, чем требуется для выполнения запроса, то есть если length > remaining(), байты не переносятся и выбрасывается BufferUnderflowException.

В противном случае этот метод копирует length байтов из этого буфера в указанный массив, начиная с текущей позиции этого буфера и указанного смещения в массиве. Затем позиция этого буфера увеличивается на length.

Иными словами, вызов этого метода в форме src.get(dst, off, len) имеет точно такой же эффект, как цикл

    for (int i = off; i < off + len; i++)
        dst[i] = src.get();
за исключением того, что сначала проверяется наличие в этом буфере достаточного количества байтов, а сам метод потенциально намного эффективнее.
Параметры:
dst — массив, в который нужно записать байты
offset — смещение в массиве первого записываемого байта; должно быть неотрицательным и не превышать dst.length
length — максимальное количество байтов для записи в указанный массив; должно быть неотрицательным и не превышать dst.length - offset
Возвращает:
Этот буфер
Исключения:
BufferUnderflowException — если в этом буфере осталось меньше length байтов
IndexOutOfBoundsException — если предварительные условия для параметров offset и length не выполняются

get

public ByteBuffer get(byte[] dst)
Относительный метод get для чтения блока данных.

Этот метод переносит байты из этого буфера в указанный массив-приёмник. Вызов этого метода в форме src.get(a) работает точно так же, как вызов

    src.get(a, 0, a.length)
Параметры:
dst — массив-приёмник
Возвращает:
Этот буфер
Исключения:
BufferUnderflowException — если в этом буфере осталось меньше length байтов

get

public ByteBuffer get(int index, byte[] dst, int offset, int length)
Абсолютный метод get для чтения блока данных.

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

Вызов этого метода в форме src.get(index, dst, offset, length) имеет точно такой же эффект, как приведённый ниже цикл, за исключением того, что сначала проверяется согласованность переданных параметров, а сам метод потенциально намного эффективнее:

    for (int i = offset, j = index; i < offset + length; i++, j++)
        dst[i] = src.get(j);
Параметры:
index — индекс в этом буфере, с которого будет считан первый байт; должен быть неотрицательным и меньше limit()
dst — массив-приёмник
offset — смещение в массиве первого записываемого байта; должно быть неотрицательным и меньше dst.length
length — количество байтов для записи в указанный массив; должно быть неотрицательным и не превышать меньшее из значений limit() - index и dst.length - offset
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException — если предварительные условия для параметров index, offset и length не выполняются
Начиная с версии:
13

get

public ByteBuffer get(int index, byte[] dst)
Абсолютный метод get для чтения блока данных.

Этот метод переносит байты из этого буфера в указанный массив-приёмник. Позиция этого буфера не изменяется. Вызов этого метода в форме src.get(index, dst) работает точно так же, как вызов:

    src.get(index, dst, 0, dst.length)
Параметры:
index — индекс в этом буфере, с которого будет считан первый байт; должен быть неотрицательным и меньше limit()
dst — массив-приёмник
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException — если index отрицательно, не меньше limit() или limit() - index < dst.length
Начиная с версии:
13

put

public ByteBuffer put(ByteBuffer src)
Относительный метод put для записи блока данных (необязательная операция).

Этот метод переносит оставшиеся байты из указанного буфера-источника в этот буфер. Если в буфере-источнике осталось больше байтов, чем помещается в этом буфере, то есть если src.remaining() > remaining(), байты не переносятся и выбрасывается BufferOverflowException.

В противном случае этот метод копирует n = src.remaining() байтов из указанного буфера в этот буфер, начиная с текущей позиции каждого буфера. Затем позиции обоих буферов увеличиваются на n.

Иными словами, вызов этого метода в форме dst.put(src) имеет точно такой же эффект, как цикл

    while (src.hasRemaining())
        dst.put(src.get());
за исключением того, что сначала проверяется наличие в этом буфере достаточного свободного места, а сам метод потенциально намного эффективнее. Если этот буфер и буфер-источник используют один и тот же базовый массив или память, результат будет таким, как если бы исходные элементы сначала были скопированы во временное место, а затем записаны в этот буфер.
Параметры:
src — буфер-источник, из которого нужно считывать байты; не должен совпадать с этим буфером
Возвращает:
Этот буфер
Исключения:
BufferOverflowException — если в этом буфере недостаточно места для оставшихся байтов буфера-источника
IllegalArgumentException — если буфер-источник совпадает с этим буфером
ReadOnlyBufferException — если этот буфер доступен только для чтения

put

public ByteBuffer put(int index, ByteBuffer src, int offset, int length)
Абсолютный метод put для записи блока данных (необязательная операция).

Этот метод переносит length байтов из указанного буфера-источника в этот буфер, начиная с указанной offset в буфере-источнике и указанной index в этом буфере. Позиции обоих буферов не изменяются.

Иными словами, вызов этого метода в форме dst.put(index, src, offset, length) имеет точно такой же эффект, как цикл

    for (int i = offset, j = index; i < offset + length; i++, j++)
        dst.put(j, src.get(i));
за исключением того, что сначала проверяется согласованность переданных параметров, а сам метод потенциально намного эффективнее. Если этот буфер и буфер-источник используют один и тот же базовый массив или память, результат будет таким, как если бы исходные элементы сначала были скопированы во временное место, а затем записаны в этот буфер.
Параметры:
index — индекс в этом буфере, по которому будет записан первый байт; должен быть неотрицательным и меньше limit()
src — буфер, из которого нужно считывать байты
offset — индекс в буфере-источнике, с которого будет считан первый байт; должен быть неотрицательным и меньше src.limit()
length — количество байтов для чтения из указанного буфера; должно быть неотрицательным и не превышать меньшее из значений limit() - index и src.limit() - offset
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException — если предварительные условия для параметров index, offset и length не выполняются
ReadOnlyBufferException — если этот буфер доступен только для чтения
Начиная с версии:
16

put

public ByteBuffer put(byte[] src, int offset, int length)
Относительный метод put для записи блока данных (необязательная операция).

Этот метод переносит байты из указанного массива-источника в этот буфер. Если из массива нужно скопировать больше байтов, чем осталось места в этом буфере, то есть если length > remaining(), байты не переносятся и выбрасывается BufferOverflowException.

В противном случае этот метод копирует length байтов из указанного массива в этот буфер, начиная с указанного смещения в массиве и текущей позиции этого буфера. Затем позиция этого буфера увеличивается на length.

Иными словами, вызов этого метода в форме dst.put(src, off, len) имеет точно такой же эффект, как цикл

    for (int i = off; i < off + len; i++)
        dst.put(src[i]);
за исключением того, что сначала проверяется наличие в этом буфере достаточного свободного места, а сам метод потенциально намного эффективнее.
Параметры:
src — массив, из которого нужно считывать байты
offset — смещение в массиве первого считываемого байта; должно быть неотрицательным и не превышать src.length
length — количество байтов для чтения из указанного массива; должно быть неотрицательным и не превышать src.length - offset
Возвращает:
Этот буфер
Исключения:
BufferOverflowException — если в этом буфере недостаточно места
IndexOutOfBoundsException — если предварительные условия для параметров offset и length не выполняются
ReadOnlyBufferException — если этот буфер доступен только для чтения

put

public final ByteBuffer put(byte[] src)
Относительный метод put для записи блока данных (необязательная операция).

Этот метод переносит всё содержимое указанного массива байтов-источника в этот буфер. Вызов этого метода в форме dst.put(a) работает точно так же, как вызов

    dst.put(a, 0, a.length)
Параметры:
src — массив-источник
Возвращает:
Этот буфер
Исключения:
BufferOverflowException — если в этом буфере недостаточно места
ReadOnlyBufferException — если этот буфер доступен только для чтения

put

public ByteBuffer put(int index, byte[] src, int offset, int length)
Абсолютный метод put для записи блока данных (необязательная операция).

Этот метод переносит length байтов из указанного массива, начиная с указанного смещения в массиве и указанного индекса в этом буфере. Позиция этого буфера не изменяется.

Вызов этого метода в форме dst.put(index, src, offset, length) имеет точно такой же эффект, как приведённый ниже цикл, за исключением того, что сначала проверяется согласованность переданных параметров, а сам метод потенциально намного эффективнее:

    for (int i = offset, j = index; i < offset + length; i++, j++)
        dst.put(j, src[i]);
Параметры:
index — индекс в этом буфере, по которому будет записан первый байт; должен быть неотрицательным и меньше limit()
src — массив, из которого нужно считывать байты
offset — смещение в массиве первого считываемого байта; должно быть неотрицательным и меньше src.length
length — количество байтов для чтения из указанного массива; должно быть неотрицательным и не превышать меньшее из значений limit() - index и src.length - offset
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException — если предварительные условия для параметров index, offset и length не выполняются
ReadOnlyBufferException — если этот буфер доступен только для чтения
Начиная с версии:
13

put

public ByteBuffer put(int index, byte[] src)
Абсолютный метод put для записи блока данных (необязательная операция).

Этот метод копирует байты из указанного массива-источника в этот буфер. Позиция этого буфера не изменяется. Вызов этого метода в форме dst.put(index, src) работает точно так же, как вызов:

    dst.put(index, src, 0, src.length);
Параметры:
index — индекс в этом буфере, по которому будет записан первый байт; должен быть неотрицательным и меньше limit()
src — массив, из которого нужно считывать байты
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException — если index отрицательно, не меньше limit() или limit() - index < src.length
ReadOnlyBufferException — если этот буфер доступен только для чтения
Начиная с версии:
13

hasArray

public final boolean hasArray()
Показывает, использует ли этот буфер доступный массив байтов в качестве хранилища.

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

Определено в:
hasArray в классе Buffer
Возвращает:
true, если и только если этот буфер использует массив в качестве хранилища и не доступен только для чтения

array

public final byte[] array()
Возвращает массив байтов, служащий хранилищем этого буфера (необязательная операция).

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

Перед вызовом этого метода вызовите метод hasArray, чтобы убедиться, что этот буфер имеет доступный массив-хранилище.

Определено в:
array в классе Buffer
Возвращает:
Массив, служащий хранилищем этого буфера
Исключения:
ReadOnlyBufferException — если этот буфер использует массив в качестве хранилища, но доступен только для чтения
UnsupportedOperationException — если этот буфер не использует доступный массив в качестве хранилища

arrayOffset

public final int arrayOffset()
Возвращает смещение в массиве-хранилище этого буфера, соответствующее первому элементу буфера (необязательная операция).

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

Перед вызовом этого метода вызовите метод hasArray, чтобы убедиться, что этот буфер имеет доступный массив-хранилище.

Определено в:
arrayOffset в классе Buffer
Возвращает:
Смещение в массиве этого буфера, соответствующее первому элементу буфера
Исключения:
ReadOnlyBufferException — если этот буфер использует массив в качестве хранилища, но доступен только для чтения
UnsupportedOperationException — если этот буфер не использует доступный массив в качестве хранилища

position

public ByteBuffer position(int newPosition)
Устанавливает позицию этого буфера. Если отметка определена и больше новой позиции, она сбрасывается.
Переопределяет:
position в классе Buffer
Параметры:
newPosition — новое значение позиции; должно быть неотрицательным и не превышать текущий предел
Возвращает:
Этот буфер
Начиная с версии:
9

limit

public ByteBuffer limit(int newLimit)
Устанавливает предел этого буфера. Если позиция больше нового предела, она устанавливается в новое значение предела. Если отметка определена и больше нового предела, она сбрасывается.
Переопределяет:
limit в классе Buffer
Параметры:
newLimit — новое значение предела; должно быть неотрицательным и не превышать ёмкость этого буфера
Возвращает:
Этот буфер
Начиная с версии:
9

mark

public ByteBuffer mark()
Устанавливает отметку этого буфера в текущей позиции.
Переопределяет:
mark в классе Buffer
Возвращает:
Этот буфер
Начиная с версии:
9

reset

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

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

Переопределяет:
reset в классе Buffer
Возвращает:
Этот буфер
Начиная с версии:
9

clear

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

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

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

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

Переопределяет:
clear в классе Buffer
Возвращает:
Этот буфер
Начиная с:
9

flip

public ByteBuffer 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 при передаче данных из одного места в другое.

Переопределяет:
flip в классе Buffer
Возвращает:
Этот буфер
Начиная с:
9

rewind

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

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

    out.write(buf);    // Write remaining data
    buf.rewind();      // Rewind buffer
    buf.get(array);    // Copy data into array
Переопределяет:
rewind в классе Buffer
Возвращает:
Этот буфер
Начиная с:
9

compact

public abstract ByteBuffer compact()
Уплотняет этот буфер (необязательная операция).

Байты между текущей позицией буфера и его пределом, если таковые имеются, копируются в начало буфера. То есть байт по индексу p = position() копируется в индекс ноль, байт по индексу p + 1 копируется в индекс один и так далее, пока байт по индексу limit() - 1 не будет скопирован в индекс n = limit() - 1 - p. Затем позиция буфера устанавливается равной n+1, а его предел — равным емкости. Маркер, если он установлен, сбрасывается.

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

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

    buf.clear();          // Prepare buffer for use
    while (in.read(buf) >= 0 || buf.position != 0) {
        buf.flip();
        out.write(buf);
        buf.compact();    // In case of partial write
    }
Возвращает:
Этот буфер
Вызывает исключение:
ReadOnlyBufferException - Если этот буфер доступен только для чтения

isDirect

public abstract boolean isDirect()
Сообщает, является ли этот байтовый буфер прямым.
Указан в:
isDirect в классе Buffer
Возвращает:
true тогда и только тогда, когда этот буфер является прямым

toString

public String toString()
Возвращает строку со сводной информацией о состоянии этого буфера.
Переопределяет:
toString в классе Object
Возвращает:
Сводная строка

hashCode

public int hashCode()
Возвращает текущий хеш-код этого буфера.

Хеш-код байтового буфера зависит только от оставшихся в нем элементов, то есть от элементов от position() до элемента по индексу limit() - 1 включительно.

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

Переопределяет:
hashCode в классе Object
Возвращает:
Текущий хеш-код этого буфера
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

equals

public boolean equals(Object ob)
Сообщает, равен ли этот буфер другому объекту.

Два байтовых буфера равны тогда и только тогда, когда

  1. они имеют одинаковый тип элементов;

  2. в них осталось одинаковое количество элементов;

  3. последовательности оставшихся элементов равны поэлементно независимо от их начальных позиций.

Байтовый буфер не равен объекту любого другого типа.

Переопределяет:
equals в классе Object
Параметры:
ob - Объект, с которым сравнивается этот буфер
Возвращает:
true тогда и только тогда, когда этот буфер равен указанному объекту
См. также:
  • Object.hashCode()
  • HashMap

compareTo

public int compareTo(ByteBuffer that)
Сравнивает этот буфер с другим.

Байтовые буферы сравниваются лексикографически по последовательностям оставшихся элементов, независимо от начальной позиции каждой последовательности в соответствующем буфере. Пары элементов byte сравниваются так, как если бы был вызван метод Byte.compare(byte,byte).

Байтовый буфер нельзя сравнить с объектом любого другого типа.

Указан в:
compareTo в интерфейсе Comparable<ByteBuffer>
Параметры:
that - объект для сравнения.
Возвращает:
Отрицательное целое число, ноль или положительное целое число, если этот буфер меньше, равен или больше указанного буфера

mismatch

public int mismatch(ByteBuffer that)
Находит и возвращает относительный индекс первого несовпадения между этим буфером и указанным буфером. Индекс отсчитывается относительно position каждого буфера и находится в диапазоне от 0 (включительно) до меньшего из значений remaining количества элементов в каждом буфере (не включая верхнюю границу).

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

Параметры:
that - Байтовый буфер, который проверяется на несовпадение с этим буфером
Возвращает:
Относительный индекс первого несовпадения между этим и указанным буфером; если несовпадений нет, возвращает -1.
Начиная с:
11

order

public final ByteOrder order()
Возвращает порядок байтов этого буфера.

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

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

order

public final ByteBuffer order(ByteOrder bo)
Изменяет порядок байтов этого буфера.
Параметры:
bo - Новый порядок байтов: BIG_ENDIAN или LITTLE_ENDIAN
Возвращает:
Этот буфер

alignmentOffset

public final int alignmentOffset(int index, int unitSize)
Возвращает адрес памяти, указывающий на байт по заданному индексу, по модулю заданного размера единицы выравнивания.

Возвращаемое значение неотрицательно и находится в диапазоне от 0 (включительно) до unitSize (не включая верхнюю границу); ноль означает, что адрес байта по указанному индексу выровнен по размеру единицы, а положительное значение — что адрес не выровнен. Если адрес байта по указанному индексу не выровнен, возвращаемое значение показывает, насколько нужно скорректировать индекс, чтобы найти байт по выровненному адресу. В частности, индекс следует уменьшить на возвращаемое значение, если оно не превышает index, либо увеличить на размер единицы за вычетом возвращаемого значения. Следовательно, для

    int value = alignmentOffset(index, unitSize)
должны выполняться равенства
    alignmentOffset(index - value, unitSize) == 0, value <= index
и
    alignmentOffset(index + (unitSize - value), unitSize) == 0
.
Примечание к API:
Этот метод можно использовать, чтобы определить, можно ли атомарно обращаться к байтам размера единицы, начиная с индекса, если такая возможность поддерживается нативной платформой.
Параметры:
index - Индекс для проверки смещения выравнивания; должен быть неотрицательным. Проверка верхней границы не выполняется
unitSize - Размер единицы в байтах; должен быть степенью числа 2
Возвращает:
Адрес памяти индексированного байта по модулю размера единицы
Вызывает исключение:
IllegalArgumentException - Если индекс отрицательный или размер единицы не является степенью числа 2
UnsupportedOperationException - Если буфер не является прямым и unitSize > 1
Начиная с:
9
См. также:
  • alignedSlice(int)

alignedSlice

public final ByteBuffer alignedSlice(int unitSize)
Создает новый байтовый буфер, содержимое которого представляет собой общую выровненную подпоследовательность содержимого этого буфера.

Содержимое нового буфера начинается с текущей позиции этого буфера, округленной вверх до индекса ближайшего выровненного байта для заданного размера единицы, и заканчивается на пределе этого буфера, округленном вниз до индекса ближайшего выровненного байта для заданного размера единицы. Если округление приводит к выходу за границы, емкость и предел нового буфера будут равны нулю. Если округление остается в границах, для нового буфера nb и размера единицы unitSize будут верны следующие выражения:

    nb.alignmentOffset(0, unitSize) == 0
    nb.alignmentOffset(nb.limit(), unitSize) == 0

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

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

Примечание к API:
Этот метод можно использовать для создания нового буфера, в котором к байтам размера единицы, начиная с индекса, кратного размеру единицы, можно обращаться атомарно, если такая возможность поддерживается нативной платформой.
Параметры:
unitSize - Размер единицы в байтах; должен быть степенью числа 2
Возвращает:
Новый байтовый буфер
Вызывает исключение:
IllegalArgumentException - Если размер единицы не является степенью числа 2
UnsupportedOperationException - Если буфер не является прямым и unitSize > 1
Начиная с:
9
См. также:
  • alignmentOffset(int, int)
  • slice()

getChar

public abstract char getChar()
Относительный метод get для чтения значения char.

Читает следующие два байта с текущей позиции этого буфера, объединяет их в значение char согласно текущему порядку байтов, а затем увеличивает позицию на два.

Возвращает:
Значение char по текущей позиции буфера
Вызывает исключение:
BufferUnderflowException - Если в буфере осталось меньше двух байтов

putChar

public abstract ByteBuffer putChar(char value)
Относительный метод put для записи значения char (необязательная операция).

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

Параметры:
value - Значение char для записи
Возвращает:
Этот буфер
Вызывает исключение:
BufferOverflowException - Если в буфере осталось меньше двух байтов
ReadOnlyBufferException - Если этот буфер доступен только для чтения

getChar

public abstract char getChar(int index)
Абсолютный метод get для чтения значения char.

Читает два байта по указанному индексу и объединяет их в значение char согласно текущему порядку байтов.

Параметры:
index - Индекс, по которому будут прочитаны байты
Возвращает:
Значение char по указанному индексу
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус один

putChar

public abstract ByteBuffer putChar(int index, char value)
Абсолютный метод put для записи значения char (необязательная операция).

Записывает два байта, содержащие указанное значение char в текущем порядке байтов, в буфер по заданному индексу.

Параметры:
index - Индекс, по которому будут записаны байты
value - Значение char для записи
Возвращает:
Этот буфер
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус один
ReadOnlyBufferException - Если этот буфер доступен только для чтения

asCharBuffer

public abstract CharBuffer asCharBuffer()
Создает представление этого байтового буфера в виде буфера char.

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

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

Возвращает:
Новый буфер char

getShort

public abstract short getShort()
Относительный метод get для чтения значения short.

Читает следующие два байта с текущей позиции этого буфера, объединяет их в значение short согласно текущему порядку байтов, а затем увеличивает позицию на два.

Возвращает:
Значение short по текущей позиции буфера
Вызывает исключение:
BufferUnderflowException - Если в буфере осталось меньше двух байтов

putShort

public abstract ByteBuffer putShort(short value)
Относительный метод put для записи значения short (необязательная операция).

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

Параметры:
value - Значение short для записи
Возвращает:
Этот буфер
Вызывает исключение:
BufferOverflowException - Если в буфере осталось меньше двух байтов
ReadOnlyBufferException - Если этот буфер доступен только для чтения

getShort

public abstract short getShort(int index)
Абсолютный метод get для чтения значения short.

Читает два байта по указанному индексу и объединяет их в значение short согласно текущему порядку байтов.

Параметры:
index - Индекс, по которому будут прочитаны байты
Возвращает:
Значение short по указанному индексу
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус один

putShort

public abstract ByteBuffer putShort(int index, short value)
Абсолютный метод put для записи значения short (необязательная операция).

Записывает два байта, содержащие указанное значение short в текущем порядке байтов, в буфер по заданному индексу.

Параметры:
index - Индекс, по которому будут записаны байты
value - Значение short для записи
Возвращает:
Этот буфер
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус один
ReadOnlyBufferException - Если этот буфер доступен только для чтения

asShortBuffer

public abstract ShortBuffer asShortBuffer()
Создает представление этого байтового буфера в виде буфера short.

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

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

Возвращает:
Новый буфер short

getInt

public abstract int getInt()
Относительный метод get для чтения значения int.

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

Возвращает:
Значение int по текущей позиции буфера
Вызывает исключение:
BufferUnderflowException - Если в буфере осталось меньше четырех байтов

putInt

public abstract ByteBuffer putInt(int value)
Относительный метод put для записи значения int (необязательная операция).

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

Параметры:
value - Значение int для записи
Возвращает:
Этот буфер
Вызывает исключение:
BufferOverflowException - Если в буфере осталось меньше четырех байтов
ReadOnlyBufferException - Если этот буфер доступен только для чтения

getInt

public abstract int getInt(int index)
Абсолютный метод get для чтения значения int.

Читает четыре байта по указанному индексу и объединяет их в значение int согласно текущему порядку байтов.

Параметры:
index - Индекс, по которому будут прочитаны байты
Возвращает:
Значение int по указанному индексу
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус три

putInt

public abstract ByteBuffer putInt(int index, int value)
Абсолютный метод put для записи значения int (необязательная операция).

Записывает четыре байта, содержащие указанное значение int в текущем порядке байтов, в буфер по заданному индексу.

Параметры:
index - Индекс, по которому будут записаны байты
value - Значение int для записи
Возвращает:
Этот буфер
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус три
ReadOnlyBufferException - Если этот буфер доступен только для чтения

asIntBuffer

public abstract IntBuffer asIntBuffer()
Создает представление этого байтового буфера в виде буфера int.

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

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

Возвращает:
Новый буфер int

getLong

public abstract long getLong()
Относительный метод get для чтения значения long.

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

Возвращает:
Значение long по текущей позиции буфера
Вызывает исключение:
BufferUnderflowException - Если в буфере осталось меньше восьми байтов

putLong

public abstract ByteBuffer putLong(long value)
Относительный метод put для записи значения long (необязательная операция).

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

Параметры:
value - Значение long для записи
Возвращает:
Этот буфер
Вызывает исключение:
BufferOverflowException - Если в буфере осталось меньше восьми байтов
ReadOnlyBufferException - Если этот буфер доступен только для чтения

getLong

public abstract long getLong(int index)
Абсолютный метод get для чтения значения long.

Читает восемь байтов по указанному индексу и объединяет их в значение long согласно текущему порядку байтов.

Параметры:
index - Индекс, по которому будут прочитаны байты
Возвращает:
Значение long по указанному индексу
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус семь

putLong

public abstract ByteBuffer putLong(int index, long value)
Абсолютный метод put для записи значения long (необязательная операция).

Записывает восемь байтов, содержащих указанное значение long в текущем порядке байтов, в буфер по заданному индексу.

Параметры:
index - Индекс, по которому будут записаны байты
value - Значение long для записи
Возвращает:
Этот буфер
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус семь
ReadOnlyBufferException - Если этот буфер доступен только для чтения

asLongBuffer

public abstract LongBuffer asLongBuffer()
Создает представление этого байтового буфера в виде буфера long.

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

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

Возвращает:
Новый буфер long

getFloat

public abstract float getFloat()
Относительный метод get для чтения значения float.

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

Возвращает:
Значение float по текущей позиции буфера
Вызывает исключение:
BufferUnderflowException - Если в буфере осталось меньше четырех байтов

putFloat

public abstract ByteBuffer putFloat(float value)
Относительный метод put для записи значения float (необязательная операция).

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

Параметры:
value - Значение float для записи
Возвращает:
Этот буфер
Вызывает исключение:
BufferOverflowException - Если в буфере осталось меньше четырех байтов
ReadOnlyBufferException - Если этот буфер доступен только для чтения

getFloat

public abstract float getFloat(int index)
Абсолютный метод get для чтения значения float.

Читает четыре байта по указанному индексу и объединяет их в значение float согласно текущему порядку байтов.

Параметры:
index - Индекс, по которому будут прочитаны байты
Возвращает:
Значение float по указанному индексу
Вызывает исключение:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера минус три

putFloat

public abstract ByteBuffer putFloat(int index, float value)
Абсолютный метод put для записи значения типа float (необязательная операция).

Записывает четыре байта, содержащие заданное значение типа float, в соответствии с текущим порядком байтов, в этот буфер по указанному индексу.

Параметры:
index — индекс, по которому будут записаны байты
value — значение типа float для записи
Возвращает:
Этот буфер
Вызывает исключение:
IndexOutOfBoundsException — если index отрицателен или не меньше предела буфера минус три
ReadOnlyBufferException — если этот буфер доступен только для чтения

asFloatBuffer

public abstract FloatBuffer asFloatBuffer()
Создает представление этого байтового буфера в виде буфера типа float.

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

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

Возвращает:
Новый буфер типа float

getDouble

public abstract double getDouble()
Относительный метод get для чтения значения типа double.

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

Возвращает:
Значение типа double по текущей позиции буфера
Вызывает исключение:
BufferUnderflowException — если в этом буфере осталось меньше восьми байтов

putDouble

public abstract ByteBuffer putDouble(double value)
Относительный метод put для записи значения типа double (необязательная операция).

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

Параметры:
value — значение типа double для записи
Возвращает:
Этот буфер
Вызывает исключение:
BufferOverflowException — если в этом буфере осталось меньше восьми байтов
ReadOnlyBufferException — если этот буфер доступен только для чтения

getDouble

public abstract double getDouble(int index)
Абсолютный метод get для чтения значения типа double.

Считывает восемь байтов по указанному индексу, объединяя их в значение типа double в соответствии с текущим порядком байтов.

Параметры:
index — индекс, с которого будут считаны байты
Возвращает:
Значение типа double по указанному индексу
Вызывает исключение:
IndexOutOfBoundsException — если index отрицателен или не меньше предела буфера минус семь

putDouble

public abstract ByteBuffer putDouble(int index, double value)
Абсолютный метод put для записи значения типа double (необязательная операция).

Записывает восемь байтов, содержащих заданное значение типа double, в соответствии с текущим порядком байтов, в этот буфер по указанному индексу.

Параметры:
index — индекс, по которому будут записаны байты
value — значение типа double для записи
Возвращает:
Этот буфер
Вызывает исключение:
IndexOutOfBoundsException — если index отрицателен или не меньше предела буфера минус семь
ReadOnlyBufferException — если этот буфер доступен только для чтения

asDoubleBuffer

public abstract DoubleBuffer asDoubleBuffer()
Создает представление этого байтового буфера в виде буфера типа double.

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

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

Возвращает:
Новый буфер типа double

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/ByteBuffer.html

Spec-Zone.ru

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