Spec-Zone.ru › OpenJDK 17

Класс ByteBuffer

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

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

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

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

  • Абсолютные и относительные методы bulk put для передачи непрерывных последовательностей байтов из массива байтов{#if[char]?, строки,} или другого буфера байтов в этот буфер;{#if[!byte]? и}

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

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

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

Буферы байтов могут быть созданы либо с помощью allocation, который выделяет место для содержимого буфера, либо с помощью wrapping существующего массива байтов {#if[char]?или строки} в буфер.

Прямые vs. непрямые буферы

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

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

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

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

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

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

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

 float  getFloat()
 float  getFloat(int index)
  void  putFloat(float f)
  void  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);
С момента:
1.4

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

Modifier and Type Method Description
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()
Создаёт представление этого буфера байтов как буфера символов.
abstract DoubleBuffer asDoubleBuffer()
Создаёт представление этого буфера байтов как буфера двойной точности.
abstract FloatBuffer asFloatBuffer()
Создаёт представление этого буфера байтов как буфера одинарной точности.
abstract IntBuffer asIntBuffer()
Создаёт представление этого буфера байтов как буфера целых чисел.
abstract LongBuffer asLongBuffer()
Создаёт представление этого буфера байтов как буфера длинных целых чисел.
abstract ByteBuffer asReadOnlyBuffer()
Создаёт новый, только для чтения, буфер байтов, который разделяет содержимое этого буфера.
abstract ShortBuffer asShortBuffer()
Создаёт представление этого буфера байтов как буфера коротких целых чисел.
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 с относительными смещениями для чтения значения символа.
abstract char getChar(int index)
Метод get с абсолютными смещениями для чтения значения символа.
abstract double getDouble()
Метод get с относительными смещениями для чтения значения двойной точности.
abstract double getDouble(int index)
Метод get с абсолютными смещениями для чтения значения двойной точности.
abstract float getFloat()
Метод get с относительными смещениями для чтения значения одинарной точности.
abstract float getFloat(int index)
Метод get с абсолютными смещениями для чтения значения одинарной точности.
abstract int getInt()
Метод get с относительными смещениями для чтения значения целого числа.
abstract int getInt(int index)
Метод get с абсолютными смещениями для чтения значения целого числа.
abstract long getLong()
Метод get с относительными смещениями для чтения значения длинного целого числа.
abstract long getLong(int index)
Метод get с абсолютными смещениями для чтения значения длинного целого числа.
abstract short getShort()
Метод get с относительными смещениями для чтения значения короткого целого числа.
abstract short getShort(int index)
Метод get с абсолютными смещениями для чтения значения короткого целого числа.
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 с относительными смещениями для записи значения символа (необязательная операция).
abstract ByteBuffer putChar(int index, char value)
Метод put с абсолютными смещениями для записи значения символа (необязательная операция).
abstract ByteBuffer putDouble(double value)
Метод put с относительными смещениями для записи значения двойной точности (необязательная операция).
abstract ByteBuffer putDouble(int index, double value)
Метод put с абсолютными смещениями для записи значения двойной точности (необязательная операция).
abstract ByteBuffer putFloat(float value)
Метод put с относительными смещениями для записи значения одинарной точности (необязательная операция).
abstract ByteBuffer putFloat(int index, float value)
Метод put с абсолютными смещениями для записи значения одинарной точности (необязательная операция).
abstract ByteBuffer putInt(int value)
Метод put с относительными смещениями для записи значения целого числа (необязательная операция).
abstract ByteBuffer putInt(int index, int value)
Метод put с абсолютными смещениями для записи значения целого числа (необязательная операция).
abstract ByteBuffer putLong(int index, long value)
Метод put с абсолютными смещениями для записи значения длинного целого числа (необязательная операция).
abstract ByteBuffer putLong(long value)
Метод put с относительными смещениями для записи значения длинного целого числа (необязательная операция).
abstract ByteBuffer putShort(int index, short value)
Метод put с абсолютными смещениями для записи значения короткого целого числа (необязательная операция).
abstract ByteBuffer putShort(short value)
Метод put с относительными смещениями для записи значения короткого целого числа (необязательная операция).
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)
Оборачивает массив байтов в буфер.

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

capacity, hasRemaining, isReadOnly, limit, position, remaining

Методы, объявленные в классе java.lang.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, его позиция — нулём, его отметка — неопределённой, а порядок байтов — slice. Его 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 - Новое значение позиции; должно быть неотрицательным и не больше текущего предела
Возвращает:
Этот буфер

limit

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

mark

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

reset

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

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

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

clear

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

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

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

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

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

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
Возвращает:
Этот буфер

rewind

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

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

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

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.

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

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

equals

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

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

  1. У них одинаковый тип элементов,

  2. У них одинаковое количество оставшихся элементов, и

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

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

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

compareTo

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

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

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

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

mismatch

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

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

Параметры:
that - Байтовый буфер, который должен быть проверен на несоответствие с этим буфером
Возвращает:
Относительный индекс первого несовпадения между этим и заданным буфером, в противном случае -1, если несоответствия нет.
Since:
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 Note:
Этот метод может использоваться для определения, могут ли байты размера единицы с заданного индекса быть обработаны атомарно, если это поддерживается родной платформой.
Implementation Note:
Эта реализация выбрасывает UnsupportedOperationException для непрямых буферов, когда заданный размер единицы больше 8.
Параметры:
index - Индекс для запроса смещения выравнивания, должен быть неотрицательным, проверка верхних границ не выполняется
unitSize - Размер единицы в байтах, должен быть степенью 2
Возвращает:
Адрес памяти байта с индексом по модулю размера единицы
Исключение:
IllegalArgumentException - Если индекс отрицательный или размер единицы не является степенью 2
UnsupportedOperationException - Если родная платформа не гарантирует стабильных значений смещения выравнивания для данного размера единицы при управлении областями памяти буферов того же типа, что и этот буфер (прямой или непрямой). Например, если сборка мусора приведет к перемещению области памяти, покрываемой непрямым буфером, из одного места в другое, и оба места имеют разные характеристики выравнивания.
Since:
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 Note:
Этот метод может использоваться для создания нового буфера, где байты размера единицы с индекса, кратного размеру единицы, могут быть обработаны атомарно, если это поддерживается родной платформой.
Implementation Note:
Эта реализация выбрасывает UnsupportedOperationException для непрямых буферов, когда заданный размер единицы больше 8.
Параметры:
unitSize - Размер единицы в байтах, должен быть степенью 2
Возвращает:
Новый байтовый буфер
Исключение:
IllegalArgumentException - Если размер единицы не является степенью 2
UnsupportedOperationException - Если родная платформа не гарантирует стабильные выровненные срезы для заданного размера единицы при управлении областями памяти буферов того же типа, что и этот буфер (прямой или непрямой). Например, если сборка мусора приведет к перемещению области памяти, покрываемой непрямым буфером, из одного места в другое, и оба места имеют разные характеристики выравнивания.
Since:
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

© 1993, 2021, 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/17/docs/api/java.base/java/nio/ByteBuffer.html

Spec-Zone.ru

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