Класс ByteBuffer
- Все реализованные интерфейсы:
Comparable<ByteBuffer>
- Прямые известные подклассы:
MappedByteBuffer
public abstract class ByteBuffer extends Buffer implements Comparable<ByteBuffer>
Этот класс определяет шесть категорий операций с буферами байтов:
Абсолютные и относительные методы
getиputдля чтения и записи отдельных байтов;Абсолютные и относительные методы
bulk getдля передачи непрерывных последовательностей байтов из этого буфера в массив;Абсолютные и относительные методы
bulk putдля передачи непрерывных последовательностей байтов из массива байтов{#if[char]?, строки,} или другого буфера байтов в этот буфер;{#if[!byte]? и}Абсолютные и относительные методы
getиputдля чтения и записи значений других примитивных типов, переводя их в последовательности байтов и обратно в зависимости от определённого порядка байтов;Методы для создания буферов представлений, позволяющие рассматривать буфер байтов как буфер, содержащий значения другого примитивного типа; и
Метод для
compactingбуфера байтов.
Буферы байтов могут быть созданы либо с помощью allocation, который выделяет место для содержимого буфера, либо с помощью wrapping существующего массива байтов {#if[char]?или строки} в буфер.
Прямые vs. непрямые буферы
Буфер байтов может быть прямым или непрямым. В случае прямого буфера байтов виртуальная машина Java постарается выполнить операции ввода-вывода напрямую на нём. То есть, она попытается избежать копирования содержимого буфера в (или из) промежуточного буфера до (или после) каждого вызова одной из базовых операций ввода-вывода операционной системы.
Прямой буфер байтов можно создать, вызвав фабричный метод allocateDirect этого класса. Буферы, возвращаемые этим методом, обычно имеют несколько более высокие затраты на выделение и освобождение памяти, чем непрямые буферы. Содержимое прямых буферов может находиться вне обычной управляемой сборкой мусора кучи, поэтому их влияние на использование памяти приложением может быть не очевидно. Поэтому рекомендуется выделять прямые буферы в основном для больших, долгоживущих буферов, которые подвергаются операциям ввода-вывода на уровне системы. В общем случае лучше выделять прямые буферы только тогда, когда они дают измеримое улучшение производительности программы.
Прямой буфер байтов также может быть создан с помощью mapping области файла напрямую в память. Реализация платформы Java может необязательно поддерживать создание прямых буферов байтов из кода нативных языков через JNI. Если экземпляр одного из этих типов буферов ссылается на недоступную область памяти, то попытка доступа к этой области не изменит содержимое буфера и вызовет неопределённое исключение либо в момент доступа, либо в какой-то момент позднее.
Можно определить, является ли буфер байтов прямым или непрямым, вызвав его метод isDirect. Этот метод предоставляется для того, чтобы явное управление буферами могло выполняться в критичных к производительности кодах.
Доступ к двоичным данным
Этот класс определяет методы для чтения и записи значений всех других примитивных типов, за исключением boolean. Примитивные значения переводятся в (или из) последовательностей байтов в соответствии с текущим порядком байтов буфера, который можно получить и изменить с помощью методов order. Конкретные порядки байтов представлены экземплярами класса ByteOrder. Начальный порядок буфера байтов всегда BIG_ENDIAN.
Для доступа к гетерогенным двоичным данным, то есть последовательностям значений разных типов, этот класс определяет набор абсолютных и относительных методов get и put для каждого типа. Например, для 32-битных значений с плавающей запятой этот класс определяет:
floatgetFloat()floatgetFloat(int index)voidputFloat(float f)voidputFloat(int index, float f)
Соответствующие методы определены для типов char,
short, int, long, и double. Индексные параметры абсолютных методов get и put выражены в байтах, а не в размерах считываемого или записываемого типа.
Для доступа к однородным двоичным данным, то есть последовательностям значений одного типа, этот класс определяет методы, которые могут создавать представления заданного буфера байтов. Буфер представления — это просто другой буфер, содержимое которого основано на буфере байтов. Изменения в содержимом буфера байтов будут видны в буфере представления, и наоборот; позиции, пределы и метки этих двух буферов независимы. Метод asFloatBuffer, например, создаёт экземпляр класса FloatBuffer, который опирается на буфер байтов, на котором вызывается метод. Соответствующие методы создания представлений определены для типов char, short, int, long, и double.
Буферы представлений имеют три важных преимущества перед наборами методов get и put, специфичных для типов, описанных выше:
Буфер представления индексируется не в байтах, а в размерах значений, специфичных для типа;
Буфер представления предоставляет относительные методы массового чтения get и записи put, которые могут передавать непрерывные последовательности значений между буфером и массивом или другим буфером того же типа; и
Буфер представления, потенциально, намного эффективнее, поскольку он будет прямым только тогда, когда его основной буфер байтов является прямым.
Порядок байтов буфера представления фиксируется на момент создания представления и соответствует порядку байтов его базового буфера.
Цепочки вызовов
Методы в этом классе, которые не возвращают иное значение, указаны для возврата буфера, на котором они вызваны. Это позволяет формировать цепочки вызовов. Последовательность операторов
может, например, быть заменена одним операторомbb.putInt(0xCAFEBABE); bb.putShort(3); bb.putShort(45);
bb.putInt(0xCAFEBABE).putShort(3).putShort(45);
- С момента:
- 1.4
Краткое описание методов
| 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, его позиция — нулём, его отметка — неопределённой, а порядок байтов — slice. Его backing array будет заданным массивом, а array offset — нулём.
- Параметры:
-
array- Массив, который будет основой этого буфера - Возвращает:
- Новый буфер байтов
slice
public abstract ByteBuffer slice()
Содержимое нового буфера начнётся с текущей позиции этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и отметки двух буферов будут независимыми.
Позиция нового буфера будет равна нулю, его ёмкость и предел — количеству оставшихся байтов в этом буфере, его отметка — неопределённой, а порядок байтов — BIG_ENDIAN. Новый буфер будет прямым, если и только если этот буфер прямой, и он будет только для чтения, если и только если этот буфер только для чтения.
- Определено в:
-
sliceв классеBuffer - Возвращает:
- Новый буфер байтов
- См. также:
slice
public abstract ByteBuffer slice(int index, int length)
Содержимое нового буфера начнётся с позиции index в этом буфере и будет содержать length элементов. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и отметки двух буферов будут независимыми.
Позиция нового буфера будет равна нулю, его ёмкость и предел будут length, его отметка — неопределённой, а порядок байтов — BIG_ENDIAN. Новый буфер будет прямым, если и только если этот буфер прямой, и он будет только для чтения, если и только если этот буфер только для чтения.
- Определено в:
-
sliceв классеBuffer - Параметры:
-
index- Позиция в этом буфере, с которой начнётся содержимое нового буфера; должно быть неотрицательным и не превышатьlimit() -
length- Количество элементов, которое будет содержать новый буфер; должно быть неотрицательным и не превышатьlimit() - index - Возвращает:
- Новый буфер
- Исключение:
-
IndexOutOfBoundsException- Еслиindexотрицательно или большеlimit(),lengthотрицательно илиlength > limit() - index - С:
- 13
duplicate
public abstract ByteBuffer duplicate()
Содержимое нового буфера будет таким же, как у этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и отметки двух буферов будут независимыми.
Ёмкость, предел, позиция и отметка нового буфера будут идентичны значениям этого буфера, а порядок байтов будет BIG_ENDIAN. Новый буфер будет прямым, если и только если этот буфер прямой, и он будет только для чтения, если и только если этот буфер только для чтения.
- Определено в:
-
duplicateв классеBuffer - Возвращает:
- Новый буфер байтов
asReadOnlyBuffer
public abstract ByteBuffer asReadOnlyBuffer()
Содержимое нового буфера будет таким же, как у этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере; однако сам новый буфер будет только для чтения и не позволит изменять общее содержимое. Значения позиции, предела и отметки двух буферов будут независимыми.
Ёмкость, предел, позиция и отметка нового буфера будут идентичны значениям этого буфера, а порядок байтов будет BIG_ENDIAN.
Если этот буфер сам по себе только для чтения, то этот метод ведет себя точно так же, как метод duplicate.
- Возвращает:
- Новый буфер байтов, только для чтения
get
public abstract byte get()
- Возвращает:
- Байт в текущей позиции буфера
- Исключение:
-
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 могут быть безопасно вызваны.
- Определено в:
-
hasArrayв классеBuffer - Возвращает:
-
trueтогда и только тогда, когда этот буфер поддерживается массивом и не является только для чтения
array
public final byte[] array()
Изменения в содержимом этого буфера приведут к изменению содержимого возвращаемого массива, и наоборот.
Вызовите метод hasArray перед вызовом этого метода, чтобы убедиться, что этот буфер имеет доступный поддерживающий массив.
- Определено в:
-
arrayв классеBuffer - Возвращает:
- Массив, поддерживающий этот буфер
- Исключения:
-
ReadOnlyBufferException- Если этот буфер поддерживается массивом, но является только для чтения -
UnsupportedOperationException- Если этот буфер не поддерживается доступным массивом
arrayOffset
public final int arrayOffset()
Если этот буфер поддерживается массивом, то позиция буфера p соответствует индексу массива p + arrayOffset().
Вызовите метод hasArray перед вызовом этого метода, чтобы убедиться, что этот буфер имеет доступный поддерживающий массив.
- Определено в:
-
arrayOffsetв классеBuffer - Возвращает:
- Смещение в массиве этого буфера первого элемента буфера
- Исключения:
-
ReadOnlyBufferException- Если этот буфер поддерживается массивом, но является только для чтения -
UnsupportedOperationException- Если этот буфер не поддерживается доступным массивом
position
public ByteBuffer position(int newPosition)
- Переопределяет:
-
positionв классеBuffer - Параметры:
-
newPosition- Новое значение позиции; должно быть неотрицательным и не больше текущего предела - Возвращает:
- Этот буфер
limit
public ByteBuffer limit(int newLimit)
- Переопределяет:
-
limitв классеBuffer - Параметры:
-
newLimit- Новое значение предела; должно быть неотрицательным и не больше ёмкости этого буфера - Возвращает:
- Этот буфер
mark
public ByteBuffer mark()
- Переопределяет:
-
markв классеBuffer - Возвращает:
- Этот буфер
reset
public ByteBuffer reset()
Вызов этого метода не изменяет и не отбрасывает значение метки.
- Переопределяет:
-
resetв классеBuffer - Возвращает:
- Этот буфер
clear
public ByteBuffer clear()
Вызовите этот метод перед использованием последовательности операций чтения канала или put для заполнения этого буфера. Например:
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
Этот метод фактически не стирает данные в буфере, но он назван так, как будто он это делает, потому что он чаще всего используется в ситуациях, в которых это может быть так же хорошо.
- Переопределяет:
-
clearв классеBuffer - Возвращает:
- Этот буфер
flip
public ByteBuffer flip()
После последовательности операций чтения канала или put вызовите этот метод, чтобы подготовиться к последовательности операций записи канала или относительных операций get. Например:
buf.put(magic); // Prepend header in.read(buf); // Read data into rest of buffer buf.flip(); // Flip buffer out.write(buf); // Write header + data to channel
Этот метод часто используется вместе с методом compact при передаче данных из одного места в другое.
- Переопределяет:
-
flipв классеBuffer - Возвращает:
- Этот буфер
rewind
public ByteBuffer rewind()
Вызовите этот метод перед последовательностью операций записи в канал или get операций, предполагая, что предел уже установлен должным образом. Например:
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
- Переопределяет:
-
rewindв классеBuffer - Возвращает:
- Этот буфер
compact
public abstract ByteBuffer compact()
Байты между текущей позицией буфера и его пределом, если таковые имеются, копируются в начало буфера. То есть, байт с индексом p = position() копируется в индекс ноль, байт с индексом p + 1 копируется в индекс один и так далее, до тех пор, пока байт с индексом limit() - 1 не будет скопирован в индекс n = limit() - 1 - p. Позиция буфера затем устанавливается на n+1, а его предел — на его ёмкость. Метка, если определена, отбрасывается.
Позиция буфера устанавливается на количество скопированных байтов, а не на ноль, чтобы вызов этого метода мог быть сразу после вызова другого относительного метода put.
Вызовите этот метод после записи данных из буфера в случае, если запись была неполной. Например, следующий цикл копирует байты из одного канала в другой через буфер buf:
buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }
- Возвращает:
- Этот буфер
- Исключения:
-
ReadOnlyBufferException- Если этот буфер только для чтения
isDirect
public abstract boolean isDirect()
- Определено в:
-
isDirectв классеBuffer - Возвращает:
-
trueтогда и только тогда, когда этот буфер является прямым
toString
public String toString()
- Переопределяет:
-
toStringв классеObject - Возвращает:
- Строка обобщения
hashCode
public int hashCode()
Хэш-код байтового буфера зависит только от его оставшихся элементов; то есть от элементов с position() до, и включая, элемент на позиции limit() - 1.
Поскольку хэш-коды буферов зависят от содержимого, не рекомендуется использовать буферы в качестве ключей в хэш-картах или аналогичных структурах данных, если не известно, что их содержимое не изменится.
- Overrides:
-
hashCodeв классеObject - Возвращает:
- Текущий хэш-код этого буфера
- См. также:
equals
public boolean equals(Object ob)
Два байтовых буфера равны тогда и только тогда, когда
У них одинаковый тип элементов,
У них одинаковое количество оставшихся элементов, и
Две последовательности оставшихся элементов, рассматриваемые независимо от своих начальных позиций, точечно равны.
Байтовый буфер не равен ни одному другому типу объекта.
- Overrides:
-
equalsв классеObject - Параметры:
-
ob- Объект, с которым должен быть сравнен этот буфер - Возвращает:
-
trueтогда и только тогда, когда этот буфер равен заданному объекту - См. также:
compareTo
public int compareTo(ByteBuffer that)
Два байтовых буфера сравниваются путем сравнения их последовательностей оставшихся элементов лексикографически, не учитывая начальную позицию каждой последовательности в соответствующем буфере. Пары byte элементов сравниваются так же, как если бы было вызвано Byte.compare(byte,byte).
Байтовый буфер не сравним ни с каким другим типом объекта.
- Specified by:
-
compareToв интерфейсеComparable<ByteBuffer> - Параметры:
-
that- объект для сравнения. - Возвращает:
- Отрицательное целое число, ноль или положительное целое число, если этот буфер меньше, равен или больше заданного буфера
mismatch
public int mismatch(ByteBuffer that)
position каждого буфера и будет в диапазоне от 0 (включительно) до меньшего из remaining элементов в каждом буфере (исключая). Если два буфера имеют общую префиксную часть, то возвращаемый индекс равен длине общего префикса, и из этого следует, что несоответствие между двумя буферами существует в этом индексе в пределах соответствующих буферов. Если один буфер является правильным префиксом другого, то возвращаемый индекс равен меньшему из оставшихся элементов в каждом буфере, и из этого следует, что индекс действителен только для буфера с большим количеством оставшихся элементов. В противном случае несоответствия нет.
- Параметры:
-
that- Байтовый буфер, который должен быть проверен на несоответствие с этим буфером - Возвращает:
- Относительный индекс первого несовпадения между этим и заданным буфером, в противном случае -1, если несоответствия нет.
- Since:
- 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 Note:
- Этот метод может использоваться для определения, могут ли байты размера единицы с заданного индекса быть обработаны атомарно, если это поддерживается родной платформой.
- Implementation Note:
- Эта реализация выбрасывает
UnsupportedOperationExceptionдля непрямых буферов, когда заданный размер единицы больше8. - Параметры:
-
index- Индекс для запроса смещения выравнивания, должен быть неотрицательным, проверка верхних границ не выполняется -
unitSize- Размер единицы в байтах, должен быть степенью2 - Возвращает:
- Адрес памяти байта с индексом по модулю размера единицы
- Исключение:
-
IllegalArgumentException- Если индекс отрицательный или размер единицы не является степенью2 -
UnsupportedOperationException- Если родная платформа не гарантирует стабильных значений смещения выравнивания для данного размера единицы при управлении областями памяти буферов того же типа, что и этот буфер (прямой или непрямой). Например, если сборка мусора приведет к перемещению области памяти, покрываемой непрямым буфером, из одного места в другое, и оба места имеют разные характеристики выравнивания. - Since:
- 9
- См. также:
alignedSlice
public final ByteBuffer alignedSlice(int unitSize)
Содержимое нового буфера начнется с текущей позиции этого буфера, округлив вверх до индекса ближайшего выровненного байта для заданного размера единицы, и закончится пределом этого буфера, округлив вниз до индекса ближайшего выровненного байта для заданного размера единицы. Если округление приводит к значениям за пределами границ, то емкость и предел нового буфера будут равны нулю. Если округление происходит в пределах границ, следующие выражения будут истинными для нового буфера nb и размера единицы unitSize:
nb.alignmentOffset(0, unitSize) == 0
nb.alignmentOffset(nb.limit(), unitSize) == 0
Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимыми.
Позиция нового буфера будет равна нулю, его емкость и предел будут равны количеству оставшихся байтов в этом буфере или меньше, с учетом выравнивания, его отметка будет неопределенной, а его порядок байтов будет BIG_ENDIAN. Новый буфер будет прямым тогда и только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер является только для чтения.
- API Note:
- Этот метод может использоваться для создания нового буфера, где байты размера единицы с индекса, кратного размеру единицы, могут быть обработаны атомарно, если это поддерживается родной платформой.
- Implementation Note:
- Эта реализация выбрасывает
UnsupportedOperationExceptionдля непрямых буферов, когда заданный размер единицы больше8. - Параметры:
-
unitSize- Размер единицы в байтах, должен быть степенью2 - Возвращает:
- Новый байтовый буфер
- Исключение:
-
IllegalArgumentException- Если размер единицы не является степенью2 -
UnsupportedOperationException- Если родная платформа не гарантирует стабильные выровненные срезы для заданного размера единицы при управлении областями памяти буферов того же типа, что и этот буфер (прямой или непрямой). Например, если сборка мусора приведет к перемещению области памяти, покрываемой непрямым буфером, из одного места в другое, и оба места имеют разные характеристики выравнивания. - Since:
- 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, 2021, 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/17/docs/api/java.base/java/nio/ByteBuffer.html