Класс ByteBuffer
- Все реализуемые интерфейсы:
Comparable<ByteBuffer>
- Прямые известные подклассы:
MappedByteBuffer
public abstract sealed class ByteBuffer extends Buffer implements Comparable<ByteBuffer> permits MappedByteBuffer (not exhaustive)
Этот класс определяет шесть категорий операций над байтовыми буферами:
Абсолютные и относительные методы
getиput, которые читают и записывают отдельные байты;Абсолютные и относительные методы
bulk get, которые передают непрерывные последовательности байтов из этого буфера в массив;Абсолютные и относительные методы
bulk put, которые передают непрерывные последовательности байтов из массива байтов или другого байтового буфера в этот буфер;Абсолютные и относительные методы
getиput, которые читают и записывают значения других примитивных типов, преобразуя их в последовательности байтов и обратно в соответствии с определённым порядком байтов;Методы создания буферов-представлений, позволяющих представить байтовый буфер как буфер, содержащий значения другого примитивного типа; и
Метод для
compactingбайтового буфера.
Байтовые буферы можно создать либо вызовом метода allocation, который выделяет место для содержимого буфера, либо путем wrapping существующего массива байтов в буфер.
Прямые и непрямые буферы
Байтовый буфер бывает прямым или непрямым. Для прямого байтового буфера виртуальная машина Java приложит все усилия, чтобы выполнять операции ввода-вывода непосредственно с ним. То есть она попытается избежать копирования содержимого буфера в промежуточный буфер (или из него) перед каждым вызовом (или после него) одной из базовых операций ввода-вывода операционной системы.
Прямой байтовый буфер можно создать, вызвав фабричный метод allocateDirect этого класса. Буферы, возвращаемые этим методом, обычно имеют несколько более высокие затраты на выделение и освобождение памяти, чем непрямые буферы. Содержимое прямых буферов может размещаться вне обычной кучи, управляемой сборщиком мусора, поэтому их влияние на объем памяти, используемой приложением, может быть неочевидным. Поэтому рекомендуется выделять прямые буферы преимущественно для больших буферов с длительным сроком жизни, используемых базовыми операциями ввода-вывода системы. В целом прямые буферы следует выделять только тогда, когда они обеспечивают измеримый прирост производительности программы.
Прямой байтовый буфер также можно создать, mapping область файла непосредственно в память. Реализация платформы Java может по желанию поддерживать создание прямых байтовых буферов из машинного кода с помощью JNI. Если экземпляр одного из этих типов буферов ссылается на недоступную область памяти, попытка доступа к этой области не изменит содержимое буфера и приведёт к выбрасыванию исключения, тип которого не определён: либо во время доступа, либо позднее.
Определить, является ли байтовый буфер прямым или непрямым, можно, вызвав его метод isDirect. Этот метод предоставлен для явного управления буферами в коде, критичном к производительности.
Доступ к двоичным данным
Этот класс определяет методы для чтения и записи значений всех остальных примитивных типов, кроме boolean. Примитивные значения преобразуются в последовательности байтов (или обратно) в соответствии с текущим порядком байтов буфера, который можно получить и изменить с помощью методов order. Конкретные порядки байтов представлены экземплярами класса ByteOrder. Начальный порядок байтов байтового буфера всегда — BIG_ENDIAN.
Для доступа к гетерогенным двоичным данным, то есть к последовательностям значений разных типов, этот класс определяет семейство абсолютных и относительных методов get и put для каждого типа. Например, для значений с плавающей точкой одинарной точности (32 бита) этот класс определяет:
float getFloat()
float getFloat(int index)
ByteBuffer putFloat(float f)
ByteBuffer putFloat(int index, float f)
Соответствующие методы определены для типов char,
short, int, long и double. Параметры индекса абсолютных методов get и put задаются в байтах, а не в единицах типа, который читается или записывается.
Для доступа к гомогенным двоичным данным, то есть к последовательностям значений одного типа, этот класс определяет методы, создающие представления заданного байтового буфера. Буфер-представление — это просто другой буфер, содержимое которого хранится в байтовом буфере. Изменения содержимого байтового буфера видны в буфере-представлении, и наоборот; значения позиции, предела и отметки у этих буферов независимы. Например, метод asFloatBuffer создаёт экземпляр класса FloatBuffer, который использует в качестве хранилища байтовый буфер, для которого вызван этот метод. Соответствующие методы создания представлений определены для типов char, short, int, long и double.
Буферы-представления имеют три важных преимущества перед описанными выше семействами типизированных методов get и put:
Индексация буфера-представления выполняется не в байтах, а в единицах размера значений соответствующего типа;
Буфер-представление предоставляет относительные массовые методы get и put, которые могут передавать непрерывные последовательности значений между буфером и массивом или другим буфером того же типа; и
Буфер-представление потенциально намного эффективнее, поскольку он является прямым тогда и только тогда, когда его базовый байтовый буфер является прямым.
Порядок байтов буфера-представления фиксируется в соответствии с порядком байтов его байтового буфера на момент создания представления.
Цепочки вызовов
Методы этого класса, которые иначе не возвращали бы значение, определены так, чтобы возвращать буфер, для которого они вызваны. Это позволяет объединять вызовы методов в цепочки. Последовательность операторов
bb.putInt(0xCAFEBABE);
bb.putShort(3);
bb.putShort(45);
bb.putInt(0xCAFEBABE).putShort(3).putShort(45);
Необязательные операции
Методы, обозначенные как необязательные операции, при вызове для доступного только для чтения ByteBuffer выбрасывают ReadOnlyBufferException. Методы array и arrayOffset выбрасывают UnsupportedOperationException, если ByteBuffer не использует в качестве хранилища доступный массив байтов (независимо от того, доступен ли ByteBuffer только для чтения).Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final ByteBuffer |
alignedSlice |
Создаёт новый байтовый буфер, содержимое которого является общей выровненной подпоследовательностью содержимого этого буфера. |
final int |
alignmentOffset |
Возвращает адрес памяти байта с заданным индексом по модулю заданного размера единицы. |
static ByteBuffer |
allocate |
Выделяет новый байтовый буфер. |
static ByteBuffer |
allocateDirect |
Выделяет новый прямой байтовый буфер. |
final byte[] |
array() |
Возвращает массив байтов, используемый в качестве хранилища этого буфера (необязательная операция). |
final int |
arrayOffset() |
Возвращает смещение первого элемента буфера относительно массива, используемого в качестве хранилища этого буфера (необязательная операция). |
abstract CharBuffer |
asCharBuffer() |
Создаёт представление этого байтового буфера в виде символьного буфера. |
abstract DoubleBuffer |
asDoubleBuffer() |
Создаёт представление этого байтового буфера в виде буфера double. |
abstract FloatBuffer |
asFloatBuffer() |
Создаёт представление этого байтового буфера в виде буфера float. |
abstract IntBuffer |
asIntBuffer() |
Создаёт представление этого байтового буфера в виде буфера int. |
abstract LongBuffer |
asLongBuffer() |
Создаёт представление этого байтового буфера в виде буфера long. |
abstract ByteBuffer |
asReadOnlyBuffer() |
Создаёт новый байтовый буфер только для чтения, совместно использующий содержимое этого буфера. |
abstract ShortBuffer |
asShortBuffer() |
Создаёт представление этого байтового буфера в виде буфера short. |
ByteBuffer |
clear() |
Очищает этот буфер. |
abstract ByteBuffer |
compact() |
Уплотняет этот буфер (необязательная операция). |
int |
compareTo |
Сравнивает этот буфер с другим. |
abstract ByteBuffer |
duplicate() |
Создаёт новый байтовый буфер, совместно использующий содержимое этого буфера. |
boolean |
equals |
Определяет, равен ли этот буфер другому объекту. |
ByteBuffer |
flip() |
Переводит этот буфер в режим чтения. |
abstract byte |
get() |
Относительный метод get. |
ByteBuffer |
get |
Относительный массовый метод get. |
ByteBuffer |
get |
Относительный массовый метод get. |
abstract byte |
get |
Абсолютный метод get. |
ByteBuffer |
get |
Абсолютный массовый метод get. |
ByteBuffer |
get |
Абсолютный массовый метод get. |
abstract char |
getChar() |
Относительный метод get для чтения значения char. |
abstract char |
getChar |
Абсолютный метод get для чтения значения char. |
abstract double |
getDouble() |
Относительный метод get для чтения значения double. |
abstract double |
getDouble |
Абсолютный метод get для чтения значения double. |
abstract float |
getFloat() |
Относительный метод get для чтения значения float. |
abstract float |
getFloat |
Абсолютный метод get для чтения значения float. |
abstract int |
getInt() |
Относительный метод get для чтения значения int. |
abstract int |
getInt |
Абсолютный метод get для чтения значения int. |
abstract long |
getLong() |
Относительный метод get для чтения значения long. |
abstract long |
getLong |
Абсолютный метод get для чтения значения long. |
abstract short |
getShort() |
Относительный метод get для чтения значения short. |
abstract short |
getShort |
Абсолютный метод get для чтения значения short. |
final boolean |
hasArray() |
Определяет, использует ли этот буфер в качестве хранилища доступный массив байтов. |
int |
hashCode() |
Возвращает текущий хеш-код этого буфера. |
abstract boolean |
isDirect() |
Определяет, является ли этот байтовый буфер прямым. |
ByteBuffer |
limit |
Устанавливает предел этого буфера. |
ByteBuffer |
mark() |
Устанавливает отметку этого буфера в его текущей позиции. |
int |
mismatch |
Находит и возвращает относительный индекс первого несовпадения между этим буфером и заданным буфером. |
final ByteOrder |
order() |
Возвращает порядок байтов этого буфера. |
final ByteBuffer |
order |
Изменяет порядок байтов этого буфера. |
ByteBuffer |
position |
Устанавливает позицию этого буфера. |
abstract ByteBuffer |
put |
Относительный метод put (необязательная операция). |
final ByteBuffer |
put |
Относительный массовый метод put (необязательная операция). |
ByteBuffer |
put |
Относительный массовый метод put (необязательная операция). |
abstract ByteBuffer |
put |
Абсолютный метод put (необязательная операция). |
ByteBuffer |
put |
Абсолютный массовый метод put (необязательная операция). |
ByteBuffer |
put |
Абсолютный массовый метод put (необязательная операция). |
ByteBuffer |
put |
Абсолютный массовый метод put (необязательная операция). |
ByteBuffer |
put |
Относительный массовый метод put (необязательная операция). |
abstract ByteBuffer |
putChar |
Относительный метод put для записи значения char (необязательная операция). |
abstract ByteBuffer |
putChar |
Абсолютный метод put для записи значения char (необязательная операция). |
abstract ByteBuffer |
putDouble |
Относительный метод put для записи значения double (необязательная операция). |
abstract ByteBuffer |
putDouble |
Абсолютный метод put для записи значения double (необязательная операция). |
abstract ByteBuffer |
putFloat |
Относительный метод put для записи значения float (необязательная операция). |
abstract ByteBuffer |
putFloat |
Абсолютный метод put для записи значения float (необязательная операция). |
abstract ByteBuffer |
putInt |
Относительный метод put для записи значения int (необязательная операция). |
abstract ByteBuffer |
putInt |
Абсолютный метод put для записи значения int (необязательная операция). |
abstract ByteBuffer |
putLong |
Абсолютный метод put для записи значения long (необязательная операция). |
abstract ByteBuffer |
putLong |
Относительный метод put для записи значения long (необязательная операция). |
abstract ByteBuffer |
putShort |
Абсолютный метод put для записи значения short (необязательная операция). |
abstract ByteBuffer |
putShort |
Относительный метод put для записи значения short (необязательная операция). |
ByteBuffer |
reset() |
Сбрасывает позицию этого буфера к позиции, отмеченной ранее. |
ByteBuffer |
rewind() |
Перематывает этот буфер. |
abstract ByteBuffer |
slice() |
Создаёт новый байтовый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера. |
abstract ByteBuffer |
slice |
Создаёт новый байтовый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера. |
String |
toString() |
Возвращает строку с описанием состояния этого буфера. |
static ByteBuffer |
wrap |
Оборачивает массив байтов в буфер. |
static ByteBuffer |
wrap |
Оборачивает массив байтов в буфер. |
Методы, объявленные в классе Buffer
capacity, hasRemaining, isReadOnly, limit, position, remaining | Модификатор и тип | Метод | Описание |
|---|---|---|
final int |
capacity() |
Возвращает ёмкость этого буфера. |
final boolean |
hasRemaining() |
Определяет, есть ли элементы между текущей позицией и пределом. |
abstract boolean |
isReadOnly() |
Определяет, доступен ли этот буфер только для чтения. |
final int |
limit() |
Возвращает предел этого буфера. |
final int |
position() |
Возвращает позицию этого буфера. |
final int |
remaining() |
Возвращает количество элементов между текущей позицией и пределом. |
Методы, объявленные в классе Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация устарела и подлежит удалению в одном из следующих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать до своего пробуждения, обычно в результате вызова уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать до своего пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
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
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. Новый буфер будет прямым тогда и только тогда, когда прямым является этот буфер, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
asReadOnlyBuffer
public abstract ByteBuffer asReadOnlyBuffer()
Содержимое нового буфера будет таким же, как у этого буфера. Изменения содержимого этого буфера будут видны в новом буфере; однако сам новый буфер будет доступен только для чтения и не позволит изменять общее содержимое. Значения позиции, предела и метки двух буферов будут независимыми.
Значения ёмкости, предела, позиции и метки нового буфера будут идентичны соответствующим значениям этого буфера, а порядок байтов будет BIG_ENDIAN.
Если этот буфер сам доступен только для чтения, данный метод работает точно так же, как метод duplicate.
- Возвращает:
- Новый байтовый буфер, доступный только для чтения
get
public abstract byte get()
- Возвращает:
- Байт в текущей позиции буфера
- Исключения:
-
BufferUnderflowException— если текущая позиция буфера не меньше его предела
put
public abstract ByteBuffer put(byte b)
Записывает указанный байт в этот буфер в текущей позиции, а затем увеличивает позицию.
- Параметры:
-
b— записываемый байт - Возвращает:
- Этот буфер
- Исключения:
-
BufferOverflowException— если текущая позиция этого буфера не меньше его предела -
ReadOnlyBufferException— если этот буфер доступен только для чтения
get
public abstract byte get(int index)
- Параметры:
-
index— индекс, по которому будет считан байт - Возвращает:
- Байт по указанному индексу
- Исключения:
-
IndexOutOfBoundsException— еслиindexотрицательно или не меньше предела буфера
put
public abstract ByteBuffer put(int index, byte b)
Записывает указанный байт в этот буфер по указанному индексу.
- Параметры:
-
index— индекс, по которому будет записан байт -
b— записываемое значение байта - Возвращает:
- Этот буфер
- Исключения:
-
IndexOutOfBoundsException— еслиindexотрицательно или не меньше предела буфера -
ReadOnlyBufferException— если этот буфер доступен только для чтения
get
public ByteBuffer get(byte[] dst, int offset, int length)
Этот метод переносит байты из этого буфера в указанный массив назначения. Если в буфере осталось меньше байтов, чем требуется для выполнения запроса, то есть если 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)
Этот метод переносит байты из этого буфера в указанный массив назначения. Вызов этого метода в форме src.get(a) работает точно так же, как вызов
src.get(a, 0, a.length)
- Параметры:
-
dst— массив назначения - Возвращает:
- Этот буфер
- Исключения:
-
BufferUnderflowException— если в этом буфере осталось меньшеlengthбайтов
get
public ByteBuffer get(int index, byte[] dst, int offset, int length)
Этот метод переносит 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)
Этот метод переносит байты из этого буфера в указанный массив назначения. Позиция этого буфера не изменяется. Вызов этого метода в форме 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)
Этот метод переносит оставшиеся байты из указанного исходного буфера в этот буфер. Если в исходном буфере осталось больше байтов, чем в этом буфере, то есть если 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)
Этот метод переносит 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)
Этот метод переносит байты из указанного исходного массива в этот буфер. Если число байтов, которые требуется скопировать из массива, превышает число байтов, оставшихся в этом буфере, то есть если 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)
Этот метод переносит всё содержимое указанного исходного байтового массива в этот буфер. Вызов этого метода в форме dst.put(a) работает точно так же, как вызов
dst.put(a, 0, a.length)
- Параметры:
-
src— исходный массив - Возвращает:
- Этот буфер
- Исключения:
-
BufferOverflowException— если в этом буфере недостаточно места -
ReadOnlyBufferException— если этот буфер доступен только для чтения
put
public ByteBuffer put(int index, byte[] src, int offset, int length)
Этот метод переносит 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)
Этот метод копирует байты из указанного исходного массива в этот буфер. Позиция этого буфера не изменяется. Вызов этого метода в форме 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 можно безопасно вызывать.
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)
limit
public ByteBuffer limit(int newLimit)
mark
reset
clear
public ByteBuffer clear()
Вызовите этот метод перед использованием последовательности операций чтения из канала или операций put для заполнения этого буфера. Например:
buf.clear(); // Prepare buffer for reading
in.read(buf); // Read data
Этот метод фактически не стирает данные в буфере, но назван так, как будто стирает, поскольку чаще всего используется в ситуациях, когда это не имеет значения.
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 при передаче данных из одного места в другое.
rewind
public ByteBuffer rewind()
Вызовите этот метод перед последовательностью операций записи в канал или операций get, если предел уже установлен соответствующим образом. Например:
out.write(buf); // Write remaining data
buf.rewind(); // Rewind buffer
buf.get(array); // Copy data into array
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
toString
hashCode
public int hashCode()
Хеш-код байтового буфера зависит только от оставшихся в нём элементов, то есть от элементов, начиная с position() и заканчивая элементом по индексу limit() - 1 включительно.
Поскольку хеш-коды буферов зависят от содержимого, не рекомендуется использовать буферы в качестве ключей в хеш-таблицах или подобных структурах данных, если не известно, что их содержимое не изменится.
equals
public boolean equals(Object ob)
Два байтовых буфера равны тогда и только тогда, когда
они имеют одинаковый тип элементов;
в них осталось одинаковое количество элементов; и
две последовательности оставшихся элементов, рассматриваемые независимо от начальных позиций, равны поэлементно.
Байтовый буфер не равен объекту любого другого типа.
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
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
- См. также:
getChar
public abstract char getChar()
Считывает следующие два байта, начиная с текущей позиции этого буфера, объединяет их в значение char в соответствии с текущим порядком байтов, а затем увеличивает позицию на два.
- Возвращает:
- Значение char по текущей позиции буфера
- Вызывает исключение:
-
BufferUnderflowException- Если в этом буфере осталось меньше двух байтов
putChar
public abstract ByteBuffer putChar(char value)
Записывает два байта, содержащие заданное значение char, в текущем порядке байтов в этот буфер по текущей позиции, а затем увеличивает позицию на два.
- Параметры:
-
value- Значение char для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
BufferOverflowException- Если в этом буфере осталось меньше двух байтов -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
getChar
public abstract char getChar(int index)
Считывает два байта по заданному индексу и объединяет их в значение char в соответствии с текущим порядком байтов.
- Параметры:
-
index- Индекс, по которому будут считаны байты - Возвращает:
- Значение char по заданному индексу
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус один
putChar
public abstract ByteBuffer putChar(int index, char value)
Записывает два байта, содержащие заданное значение char, в текущем порядке байтов в этот буфер по заданному индексу.
- Параметры:
-
index- Индекс, по которому будут записаны байты -
value- Значение char для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус один -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
asCharBuffer
public abstract CharBuffer asCharBuffer()
Содержимое нового буфера начинается с текущей позиции этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимы.
Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны количеству оставшихся в этом буфере байтов, делённому на два, метка не будет задана, а порядок байтов будет соответствовать порядку байтового буфера на момент создания представления. Новый буфер будет прямым тогда и только тогда, когда этот буфер прямой, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
- Возвращает:
- Новый буфер char
getShort
public abstract short getShort()
Считывает следующие два байта, начиная с текущей позиции этого буфера, объединяет их в значение short в соответствии с текущим порядком байтов, а затем увеличивает позицию на два.
- Возвращает:
- Значение short по текущей позиции буфера
- Вызывает исключение:
-
BufferUnderflowException- Если в этом буфере осталось меньше двух байтов
putShort
public abstract ByteBuffer putShort(short value)
Записывает два байта, содержащие заданное значение short, в текущем порядке байтов в этот буфер по текущей позиции, а затем увеличивает позицию на два.
- Параметры:
-
value- Значение short для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
BufferOverflowException- Если в этом буфере осталось меньше двух байтов -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
getShort
public abstract short getShort(int index)
Считывает два байта по заданному индексу и объединяет их в значение short в соответствии с текущим порядком байтов.
- Параметры:
-
index- Индекс, по которому будут считаны байты - Возвращает:
- Значение short по заданному индексу
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус один
putShort
public abstract ByteBuffer putShort(int index, short value)
Записывает два байта, содержащие заданное значение short, в текущем порядке байтов в этот буфер по заданному индексу.
- Параметры:
-
index- Индекс, по которому будут записаны байты -
value- Значение short для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус один -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
asShortBuffer
public abstract ShortBuffer asShortBuffer()
Содержимое нового буфера начинается с текущей позиции этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимы.
Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны количеству оставшихся в этом буфере байтов, делённому на два, метка не будет задана, а порядок байтов будет соответствовать порядку байтового буфера на момент создания представления. Новый буфер будет прямым тогда и только тогда, когда этот буфер прямой, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
- Возвращает:
- Новый буфер short
getInt
public abstract int getInt()
Считывает следующие четыре байта, начиная с текущей позиции этого буфера, объединяет их в значение int в соответствии с текущим порядком байтов, а затем увеличивает позицию на четыре.
- Возвращает:
- Значение int по текущей позиции буфера
- Вызывает исключение:
-
BufferUnderflowException- Если в этом буфере осталось меньше четырёх байтов
putInt
public abstract ByteBuffer putInt(int value)
Записывает четыре байта, содержащие заданное значение int, в текущем порядке байтов в этот буфер по текущей позиции, а затем увеличивает позицию на четыре.
- Параметры:
-
value- Значение int для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
BufferOverflowException- Если в этом буфере осталось меньше четырёх байтов -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
getInt
public abstract int getInt(int index)
Считывает четыре байта по заданному индексу и объединяет их в значение int в соответствии с текущим порядком байтов.
- Параметры:
-
index- Индекс, по которому будут считаны байты - Возвращает:
- Значение int по заданному индексу
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус три
putInt
public abstract ByteBuffer putInt(int index, int value)
Записывает четыре байта, содержащие заданное значение int, в текущем порядке байтов в этот буфер по заданному индексу.
- Параметры:
-
index- Индекс, по которому будут записаны байты -
value- Значение int для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус три -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
asIntBuffer
public abstract IntBuffer asIntBuffer()
Содержимое нового буфера начинается с текущей позиции этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимы.
Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны количеству оставшихся в этом буфере байтов, делённому на четыре, метка не будет задана, а порядок байтов будет соответствовать порядку байтового буфера на момент создания представления. Новый буфер будет прямым тогда и только тогда, когда этот буфер прямой, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
- Возвращает:
- Новый буфер int
getLong
public abstract long getLong()
Считывает следующие восемь байтов, начиная с текущей позиции этого буфера, объединяет их в значение long в соответствии с текущим порядком байтов, а затем увеличивает позицию на восемь.
- Возвращает:
- Значение long по текущей позиции буфера
- Вызывает исключение:
-
BufferUnderflowException- Если в этом буфере осталось меньше восьми байтов
putLong
public abstract ByteBuffer putLong(long value)
Записывает восемь байтов, содержащих заданное значение long, в текущем порядке байтов в этот буфер по текущей позиции, а затем увеличивает позицию на восемь.
- Параметры:
-
value- Значение long для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
BufferOverflowException- Если в этом буфере осталось меньше восьми байтов -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
getLong
public abstract long getLong(int index)
Считывает восемь байтов по заданному индексу и объединяет их в значение long в соответствии с текущим порядком байтов.
- Параметры:
-
index- Индекс, по которому будут считаны байты - Возвращает:
- Значение long по заданному индексу
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус семь
putLong
public abstract ByteBuffer putLong(int index, long value)
Записывает восемь байтов, содержащих заданное значение long, в текущем порядке байтов в этот буфер по заданному индексу.
- Параметры:
-
index- Индекс, по которому будут записаны байты -
value- Значение long для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус семь -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
asLongBuffer
public abstract LongBuffer asLongBuffer()
Содержимое нового буфера начинается с текущей позиции этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимы.
Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны количеству оставшихся в этом буфере байтов, делённому на восемь, метка не будет задана, а порядок байтов будет соответствовать порядку байтового буфера на момент создания представления. Новый буфер будет прямым тогда и только тогда, когда этот буфер прямой, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
- Возвращает:
- Новый буфер long
getFloat
public abstract float getFloat()
Считывает следующие четыре байта, начиная с текущей позиции этого буфера, объединяет их в значение float в соответствии с текущим порядком байтов, а затем увеличивает позицию на четыре.
- Возвращает:
- Значение float по текущей позиции буфера
- Вызывает исключение:
-
BufferUnderflowException- Если в этом буфере осталось меньше четырёх байтов
putFloat
public abstract ByteBuffer putFloat(float value)
Записывает четыре байта, содержащие заданное значение float, в текущем порядке байтов в этот буфер по текущей позиции, а затем увеличивает позицию на четыре.
- Параметры:
-
value- Значение float для записи - Возвращает:
- Этот буфер
- Вызывает исключение:
-
BufferOverflowException- Если в этом буфере осталось меньше четырёх байтов -
ReadOnlyBufferException- Если этот буфер доступен только для чтения
getFloat
public abstract float getFloat(int index)
Считывает четыре байта по заданному индексу и объединяет их в значение float в соответствии с текущим порядком байтов.
- Параметры:
-
index- Индекс, по которому будут считаны байты - Возвращает:
- Значение float по заданному индексу
- Вызывает исключение:
-
IndexOutOfBoundsException- Еслиindexотрицателен или не меньше предела буфера минус три
putFloat
public abstract ByteBuffer putFloat(int index, float value)
Записывает четыре байта, содержащие заданное значение float, в текущем порядке байтов в этот буфер по заданному индексу.
- Параметры:
-
index— индекс, по которому будут записаны байты -
value— значение float для записи - Возвращает:
- Этот буфер
- Исключения:
-
IndexOutOfBoundsException— еслиindexотрицателен или не меньше предела буфера минус три -
ReadOnlyBufferException— если этот буфер доступен только для чтения
asFloatBuffer
public abstract FloatBuffer asFloatBuffer()
Содержимое нового буфера будет начинаться с текущей позиции этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимы.
Позиция нового буфера будет равна нулю, его емкость и предел будут равны количеству оставшихся в этом буфере байтов, деленному на четыре, его метка будет не определена, а порядок байтов будет соответствовать порядку байтов байтового буфера на момент создания представления. Новый буфер будет прямым тогда и только тогда, когда прямым является этот буфер, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
- Возвращает:
- Новый буфер float
getDouble
public abstract double getDouble()
Считывает следующие восемь байтов с текущей позиции этого буфера, объединяет их в значение double в соответствии с текущим порядком байтов, а затем увеличивает позицию на восемь.
- Возвращает:
- Значение double в текущей позиции буфера
- Исключения:
-
BufferUnderflowException— если в этом буфере осталось менее восьми байтов
putDouble
public abstract ByteBuffer putDouble(double value)
Записывает восемь байтов, содержащих заданное значение double, в текущем порядке байтов в этот буфер по текущей позиции, а затем увеличивает позицию на восемь.
- Параметры:
-
value— значение double для записи - Возвращает:
- Этот буфер
- Исключения:
-
BufferOverflowException— если в этом буфере осталось менее восьми байтов -
ReadOnlyBufferException— если этот буфер доступен только для чтения
getDouble
public abstract double getDouble(int index)
Считывает восемь байтов по заданному индексу и объединяет их в значение double в соответствии с текущим порядком байтов.
- Параметры:
-
index— индекс, с которого будут считаны байты - Возвращает:
- Значение double по заданному индексу
- Исключения:
-
IndexOutOfBoundsException— еслиindexотрицателен или не меньше предела буфера минус семь
putDouble
public abstract ByteBuffer putDouble(int index, double value)
Записывает восемь байтов, содержащих заданное значение double, в текущем порядке байтов в этот буфер по заданному индексу.
- Параметры:
-
index— индекс, по которому будут записаны байты -
value— значение double для записи - Возвращает:
- Этот буфер
- Исключения:
-
IndexOutOfBoundsException— еслиindexотрицателен или не меньше предела буфера минус семь -
ReadOnlyBufferException— если этот буфер доступен только для чтения
asDoubleBuffer
public abstract DoubleBuffer asDoubleBuffer()
Содержимое нового буфера будет начинаться с текущей позиции этого буфера. Изменения содержимого этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимы.
Позиция нового буфера будет равна нулю, его емкость и предел будут равны количеству оставшихся в этом буфере байтов, деленному на восемь, его метка будет не определена, а порядок байтов будет соответствовать порядку байтов байтового буфера на момент создания представления. Новый буфер будет прямым тогда и только тогда, когда прямым является этот буфер, и будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
- Возвращает:
- Новый буфер 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.