Класс 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() |
Создаёт представление этого байтового буфера в виде буфера char. |
abstract DoubleBuffer |
asDoubleBuffer() |
Создаёт представление этого байтового буфера в виде буфера double. |
abstract FloatBuffer |
asFloatBuffer() |
Создаёт представление этого байтового буфера в виде буфера float. |
abstract IntBuffer |
asIntBuffer() |
Создаёт представление этого байтового буфера в виде буфера int. |
abstract LongBuffer |
asLongBuffer() |
Создаёт представление этого байтового буфера в виде буфера long. |
abstract ByteBuffer |
asReadOnlyBuffer() |
Создаёт новый байтовый буфер только для чтения, совместно использующий содержимое этого буфера. |
abstract ShortBuffer |
asShortBuffer() |
Создаёт представление этого байтового буфера в виде буфера short. |
ByteBuffer |
clear() |
Очищает этот буфер. |
abstract ByteBuffer |
compact() |
Уплотняет этот буфер (необязательная операция). |
int |
compareTo |
Сравнивает этот буфер с другим. |
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
Подробное описание методов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/ByteBuffer.html