Класс ByteBuffer
- Все реализуемые интерфейсы:
Comparable<ByteBuffer>
- Прямые известные подклассы:
MappedByteBuffer
public abstract sealed class ByteBuffer extends Buffer implements Comparable<ByteBuffer> permits MappedByteBuffer (not exhaustive)
Этот класс определяет шесть категорий операций с буферами байтов:
Абсолютные и относительные методы
getиput, которые считывают и записывают отдельные байты;Абсолютные и относительные методы
bulk get, которые передают непрерывные последовательности байтов из этого буфера в массив;Абсолютные и относительные методы
bulk put, которые передают непрерывные последовательности байтов из массива байтов или другого буфера байтов в этот буфер;Абсолютные и относительные методы
getиput, которые считывают и записывают значения других примитивных типов, переводя их в последовательности байтов и обратно в соответствии с определённым порядком байтов;Методы для создания видовых буферов, которые позволяют рассматривать буфер байтов как буфер, содержащий значения других примитивных типов; и
Метод для
compactingбуфера байтов.
Буферы байтов могут быть созданы либо с помощью allocation, который выделяет место для содержимого буфера, либо с помощью wrapping существующего массива байтов в буфер.
Прямые против непрямые буферы
Буфер байтов может быть прямым или непрямым. Для прямого буфера байтов виртуальная машина Java сделает всё возможное, чтобы выполнить операции сродными ввода-вывода непосредственно с ним. То есть она постарается избежать копирования содержимого буфера в (или из) промежуточного буфера до (или после) каждого вызова одной из базовых операций ввода-вывода операционной системы.
Прямой буфер байтов может быть создан путём вызова фабричного метода allocateDirect этого класса. Буферы, возвращаемые этим методом, обычно имеют несколько более высокие затраты на выделение и освобождение памяти, чем непрямые буферы. Содержимое прямых буферов может находиться вне обычной кучи сборки мусора, поэтому их влияние на занимаемое приложением место в памяти может быть не очевидным. Поэтому рекомендуется выделять прямые буферы в основном для больших, долгоживущих буферов, которые подвергаются операциям сродными ввода-вывода системы. В целом лучше выделять прямые буферы только тогда, когда это приносит измеримое улучшение производительности программы.
Прямой буфер байтов также может быть создан путём mapping области файла непосредственно в память. Реализация платформы Java может по желанию поддерживать создание прямых буферов байтов из кода нативных языках через JNI. Если экземпляр одного из этих видов буферов ссылается на недоступную область памяти, попытка доступа к этой области не изменит содержимое буфера и вызовет неопределённую исключение либо в момент доступа, либо в некоторое последующее время.
Можно ли определить, прямой или непрямой буфер байтов, вызвав его метод isDirect. Этот метод предоставляется для того, чтобы явное управление буферами можно было выполнять в критичном для производительности коде.
Доступ к двоичным данным
Этот класс определяет методы для чтения и записи значений всех других примитивных типов, кроме boolean. Примитивные значения преобразуются в (или из) последовательностей байтов в соответствии с текущим порядком байтов буфера, который можно получить и изменить с помощью методов order. Конкретные порядки байтов представлены экземплярами класса ByteOrder. Начальный порядок буфера байтов всегда BIG_ENDIAN.
Для доступа к гетерогенным двоичным данным, то есть последовательностям значений разных типов, этот класс определяет набор абсолютных и относительных методов get и put для каждого типа. Например, для 32-битовых значений с плавающей запятой этот класс определяет:
float getFloat()
float getFloat(int index)
ByteBuffer putFloat(float f)
ByteBuffer putFloat(int index, float f)
Соответствующие методы определены для типов char,
short, int, long и double. Параметры индекса абсолютных методов get и put задаются в байтах, а не в размерах типа, который читается или записывается.
Для доступа к однородным двоичным данным, то есть последовательностям значений одного типа, этот класс определяет методы, которые могут создать видовые буферы заданного буфера байтов. Видовой буфер — это просто другой буфер, содержимое которого поддерживается буфером байтов. Изменения в содержимом буфера байтов будут видны в видовом буфере, и наоборот; значения положения, предела и метки двух буферов независимы. Например, метод asFloatBuffer создаёт экземпляр класса FloatBuffer, который поддерживается буфером байтов, на котором вызывается метод. Соответствующие методы создания видовых буферов определены для типов char, short, int, long и double.
Видовые буферы имеют три важных преимущества перед наборами методов get и put, специфичных для типа, описанных выше:
Видовой буфер индексируется не в терминах байтов, а в терминах размера значений, специфичных для типа;
Видовой буфер предоставляет относительные методы массового чтения get и записи put, которые могут передавать непрерывные последовательности значений между буфером и массивом или другим буфером того же типа; и
Видовой буфер потенциально гораздо эффективнее, потому что он будет прямым только в том случае, если его поддерживающий буфер байтов является прямым.
Порядок байтов видового буфера фиксируется как порядок байтов его буфера байтов в момент создания вида.
Цепочки вызовов
Методы в этом классе, которые не возвращают значения, по определению возвращают буфер, на котором они вызываются. Это позволяет создавать цепочки вызовов методов. Последовательность операторов
bb.putInt(0xCAFEBABE);
bb.putShort(3);
bb.putShort(45);
bb.putInt(0xCAFEBABE).putShort(3).putShort(45);
Дополнительные операции
Методы, указанные как дополнительные операции, выбрасывают исключение ReadOnlyBufferException, когда вызываются для только для чтения ByteBuffer. Методы array и arrayOffset выбрасывают UnsupportedOperationException, если ByteBuffer не поддерживается массивом байтов (независимо от того, является ли ByteBuffer только для чтения или нет).Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
final ByteBuffer |
alignedSlice |
Создаёт новый буфер байтов, чьё содержимое является совместной и выровненной подпоследовательностью содержимого этого буфера. |
final int |
alignmentOffset |
Возвращает адрес памяти, указывающий на байт в заданном индексе, по модулю заданного размера единицы. |
static ByteBuffer |
allocate |
Выделяет новый буфер байтов. |
static ByteBuffer |
allocateDirect |
Выделяет новый прямой буфер байтов. |
final byte[] |
array() |
Возвращает массив байтов, поддерживающий этот буфер (необязательная операция). |
final int |
arrayOffset() |
Возвращает смещение в массиве поддержки этого буфера первого элемента буфера (необязательная операция). |
abstract CharBuffer |
asCharBuffer() |
Создаёт представление этого буфера байтов как буфера символов. |
abstract DoubleBuffer |
asDoubleBuffer() |
Создаёт представление этого буфера байтов как буфера двойной точности. |
abstract FloatBuffer |
asFloatBuffer() |
Создаёт представление этого буфера байтов как буфера одинарной точности. |
abstract IntBuffer |
asIntBuffer() |
Создаёт представление этого буфера байтов как буфера целых чисел. |
abstract LongBuffer |
asLongBuffer() |
Создаёт представление этого буфера байтов как буфера длинных целых чисел. |
abstract ByteBuffer |
asReadOnlyBuffer() |
Создаёт новый, только для чтения, буфер байтов, который совместно использует содержимое этого буфера. |
abstract ShortBuffer |
asShortBuffer() |
Создаёт представление этого буфера байтов как буфера коротких целых чисел. |
ByteBuffer |
clear() |
Очищает этот буфер. |
abstract ByteBuffer |
compact() |
Компактует этот буфер (необязательная операция). |
int |
compareTo |
Сравнивает этот буфер с другим. |
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 для чтения значения символа. |
abstract char |
getChar |
Абсолютный метод get для чтения значения символа. |
abstract double |
getDouble() |
Относительный метод get для чтения значения двойной точности. |
abstract double |
getDouble |
Абсолютный метод get для чтения значения двойной точности. |
abstract float |
getFloat() |
Относительный метод get для чтения значения одинарной точности. |
abstract float |
getFloat |
Абсолютный метод get для чтения значения одинарной точности. |
abstract int |
getInt() |
Относительный метод get для чтения значения целого числа. |
abstract int |
getInt |
Абсолютный метод get для чтения значения целого числа. |
abstract long |
getLong() |
Относительный метод get для чтения значения длинного целого числа. |
abstract long |
getLong |
Абсолютный метод get для чтения значения длинного целого числа. |
abstract short |
getShort() |
Относительный метод get для чтения значения короткого целого числа. |
abstract short |
getShort |
Абсолютный метод get для чтения значения короткого целого числа. |
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 для записи значения символа (необязательная операция). |
abstract ByteBuffer |
putChar |
Абсолютный метод put для записи значения символа (необязательная операция). |
abstract ByteBuffer |
putDouble |
Относительный метод put для записи значения двойной точности (необязательная операция). |
abstract ByteBuffer |
putDouble |
Абсолютный метод put для записи значения двойной точности (необязательная операция). |
abstract ByteBuffer |
putFloat |
Относительный метод put для записи значения одинарной точности (необязательная операция). |
abstract ByteBuffer |
putFloat |
Абсолютный метод put для записи значения одинарной точности (необязательная операция). |
abstract ByteBuffer |
putInt |
Относительный метод put для записи значения целого числа (необязательная операция). |
abstract ByteBuffer |
putInt |
Абсолютный метод put для записи значения целого числа (необязательная операция). |
abstract ByteBuffer |
putLong |
Абсолютный метод put для записи значения длинного целого числа (необязательная операция). |
abstract ByteBuffer |
putLong |
Относительный метод put для записи значения длинного целого числа (необязательная операция). |
abstract ByteBuffer |
putShort |
Абсолютный метод put для записи значения короткого целого числа (необязательная операция). |
abstract ByteBuffer |
putShort |
Относительный метод put для записи значения короткого целого числа (необязательная операция). |
ByteBuffer |
reset() |
Сбрасывает позицию этого буфера к ранее помеченной позиции. |
ByteBuffer |
rewind() |
Перематывает этот буфер. |
abstract ByteBuffer |
slice() |
Создаёт новый байтовый буфер, содержимое которого является общим подпоследовательностью содержимого этого буфера. |
abstract ByteBuffer |
slice |
Создаёт новый байтовый буфер, содержимое которого является общим подпоследовательностью содержимого этого буфера. |
String |
toString() |
Возвращает строку, обобщающую состояние этого буфера. |
static ByteBuffer |
wrap |
Оборачивает массив байтов в буфер. |
static ByteBuffer |
wrap |
Оборачивает массив байтов в буфер. |
Методы, объявленные в классе java.nio.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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/ByteBuffer.html