Spec-Zone.ru › OpenJDK 24

Класс 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);

Дополнительные операции

Методы, указанные как дополнительные операции, выбрасывают исключение ReadOnlyBufferException, когда вызываются для только для чтения ByteBuffer. Методы array и arrayOffset выбрасывают UnsupportedOperationException, если ByteBuffer не поддерживается массивом байтов (независимо от того, является ли ByteBuffer только для чтения или нет).
Диаграмма иерархии закрытых классов:
Sealed class hierarchy graph for ByteBufferSealed class hierarchy graph for ByteBuffer
С момента:
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, его позиция будет равна нулю, его метка будет неопределённой, а порядок байтов — 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(java.lang.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)
Метод абсолютного записи целого числа типа int (дополнительная операция).

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

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

asIntBuffer

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

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

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

Возвращает:
Новый буфер целых чисел типа int

getLong

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

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

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

putLong

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

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

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

getLong

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

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

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

putLong

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

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

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

asLongBuffer

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

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

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

Возвращает:
Новый буфер длинных целых чисел типа long

getFloat

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

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

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

putFloat

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

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

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

getFloat

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

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

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

putFloat

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

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

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

asFloatBuffer

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

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

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

Возвращает:
Новый буфер чисел с плавающей точкой типа float

getDouble

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

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

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

putDouble

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

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

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

getDouble

public abstract double getDouble(int index)
Абсолютный метод получения для чтения значения типа 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, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/ByteBuffer.html

Spec-Zone.ru

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