Класс ByteBuffer

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

Буфер байтов.

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

  • Абсолютные и относительные методы 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)
 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

Методы

Модификатор и тип Метод Описание
ByteBuffer alignedSlice​(int unitSize)

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

int alignmentOffset​(int index, int unitSize)

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

static ByteBuffer allocate​(int capacity)

Выделяет новый буфер байтов.

static ByteBuffer allocateDirect​(int capacity)

Выделяет новый прямой буфер байтов.

byte[] array()

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

int arrayOffset()

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

abstract CharBuffer asCharBuffer()

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

abstract DoubleBuffer asDoubleBuffer()

Создает представление этого буфера байтов как буфера с двойной точностью.

abstract FloatBuffer asFloatBuffer()

Создает представление этого буфера байтов как буфера с плавающей точкой одинарной точности.

abstract IntBuffer asIntBuffer()

Создает представление этого буфера байтов как буфера целых чисел.

abstract LongBuffer asLongBuffer()

Создает представление этого буфера байтов как буфера длинных целых чисел.

abstract ByteBuffer asReadOnlyBuffer()

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

abstract ShortBuffer asShortBuffer()

Создает представление этого буфера байтов как буфера коротких целых чисел.

abstract ByteBuffer compact()

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

int compareTo​(ByteBuffer that)

Сравнивает этот буфер с другим.

abstract ByteBuffer duplicate()

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

boolean equals​(Object ob)

Указывает, равен ли этот буфер другому объекту.

abstract byte get()

Относительный метод get.

ByteBuffer get​(byte[] dst)

Относительный метод объемного get.

ByteBuffer get​(byte[] dst, int offset, int length)

Относительный метод объемного get.

abstract byte get​(int index)

Абсолютный метод get.

abstract char getChar()

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

abstract char getChar​(int index)

Абсолютный метод get для чтения значения char.

abstract double getDouble()

Относительный метод get для чтения значения double.

abstract double getDouble​(int index)

Абсолютный метод get для чтения значения double.

abstract float getFloat()

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

abstract float getFloat​(int index)

Абсолютный метод get для чтения значения float.

abstract int getInt()

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

abstract int getInt​(int index)

Абсолютный метод get для чтения значения int.

abstract long getLong()

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

abstract long getLong​(int index)

Абсолютный метод get для чтения значения long.

abstract short getShort()

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

abstract short getShort​(int index)

Абсолютный метод get для чтения значения short.

boolean hasArray()

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

int hashCode()

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

abstract boolean isDirect()

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

int mismatch​(ByteBuffer that)

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

ByteOrder order()

Получает порядок байтов этого буфера.

ByteBuffer order​(ByteOrder bo)

Изменяет порядок байтов этого буфера.

abstract ByteBuffer put​(byte b)

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

ByteBuffer put​(byte[] src)

Относительный метод объемного put (необязательная операция).

ByteBuffer put​(byte[] src, int offset, int length)

Относительный метод объемного put (необязательная операция).

abstract ByteBuffer put​(int index, byte b)

Абсолютный метод put (необязательная операция).

ByteBuffer put​(ByteBuffer src)

Относительный метод объемного put (необязательная операция).

abstract ByteBuffer putChar​(char value)

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

abstract ByteBuffer putChar​(int index, char value)

Абсолютный метод put для записи значения char (необязательная операция).

abstract ByteBuffer putDouble​(double value)

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

abstract ByteBuffer putDouble​(int index, double value)

Абсолютный метод put для записи значения double (необязательная операция).

abstract ByteBuffer putFloat​(float value)

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

abstract ByteBuffer putFloat​(int index, float value)

Абсолютный метод put для записи значения float (необязательная операция).

abstract ByteBuffer putInt​(int value)

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

abstract ByteBuffer putInt​(int index, int value)

Абсолютный метод put для записи значения int (необязательная операция).

abstract ByteBuffer putLong​(int index, long value)

Абсолютный метод put для записи значения long (необязательная операция).

abstract ByteBuffer putLong​(long value)

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

abstract ByteBuffer putShort​(int index, short value)

Абсолютный метод put для записи значения short (необязательная операция).

abstract ByteBuffer putShort​(short value)

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

abstract ByteBuffer slice()

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

String toString()

Возвращает строку, обобщающую состояние этого буфера.

static ByteBuffer wrap​(byte[] array)

Оборачивает массив байтов в буфер.

static ByteBuffer wrap​(byte[] array, int offset, int length)

Оборачивает массив байтов в буфер.

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

capacity, clear, flip, hasRemaining, isReadOnly, limit, limit, mark, position, position, remaining, reset, rewind

Методы, объявленные в классе 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)

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 байтов

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(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(a[i]);
за исключением того, что он сначала проверяет, достаточно ли места в этом буфере, и потенциально намного эффективнее.
Параметры:
src - Массив, из которого считываются байты
offset - Смещение в массиве первого байта для чтения; должно быть неотрицательным и не больше, чем array.length
length - Количество байтов для чтения из заданного массива; должно быть неотрицательным и не больше, чем array.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 - Если этот буфер только для чтения

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 - Если этот буфер не поддерживается доступным массивом

compact

public abstract ByteBuffer compact()

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

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

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

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

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

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

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

asShortBuffer

public abstract ShortBuffer asShortBuffer()

Создаёт представление этого буфера байтов как буфера коротких значений.

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

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

Возвращает:
Новый буфер коротких значений

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()

Создаёт представление этого буфера байтов как буфера целых значений.

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

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

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

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()

Создаёт представление этого буфера байтов как буфера длинных значений.

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

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

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

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()

Создаёт представление этого буфера байтов как буфера значений с плавающей точкой.

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

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

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

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, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/ByteBuffer.html

Spec-Zone .ru
спецификации, руководства, описания, API