Класс 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 только для чтения).- С:
- 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, его позиция — нуль, его метка — неопределённой, а порядок байтов — BIG_ENDIAN. Его 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- Новое значение позиции; должно быть неотрицательным и не больше текущего предела - Возвращает:
- Этот буфер
- См. также:
- 9
limit
public ByteBuffer limit(int newLimit)
- Переопределяет:
-
limitв классеBuffer - Параметры:
-
newLimit- Новое значение предела; должно быть неотрицательным и не больше вместимости этого буфера - Возвращает:
- Этот буфер
- См. также:
- 9
mark
public ByteBuffer mark()
- Переопределяет:
-
markв классеBuffer - Возвращает:
- Этот буфер
- См. также:
- 9
reset
public ByteBuffer reset()
Вызов этого метода не изменяет и не отбрасывает значение отметки.
- Переопределяет:
-
resetв классеBuffer - Возвращает:
- Этот буфер
- См. также:
- 9
clear
public ByteBuffer clear()
Вызовите этот метод перед использованием последовательности операций чтения канала или put для заполнения этого буфера. Например:
buf.clear(); // Prepare buffer for reading
in.read(buf); // Read data
Этот метод фактически не стирает данные в буфере, но он назван так, как будто это делает, потому что чаще всего используется в ситуациях, когда это можно считать равносильным.
- Переопределяет:
-
clearв классеBuffer - Возвращает:
- Этот буфер
- См. также:
- 9
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 - Возвращает:
- Этот буфер
- См. также:
- 9
rewind
public ByteBuffer rewind()
Вызовите этот метод перед последовательностью операций записи канала или get, предполагая, что предел уже установлен соответствующим образом. Например:
out.write(buf); // Write remaining data
buf.rewind(); // Rewind buffer
buf.get(array); // Copy data into array
- Переопределяет:
-
rewindв классеBuffer - Возвращает:
- Этот буфер
- См. также:
- 9
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 - Returns:
- Текущий код хеширования этого буфера
- See Also:
equals
public boolean equals(Object ob)
Два байтовых буфера равны тогда и только тогда, когда:
Они имеют одинаковый тип элементов,
Они имеют одинаковое количество оставшихся элементов, и
Две последовательности оставшихся элементов, рассматриваемые независимо от своих начальных позиций, равны попарно.
Байтовый буфер не равен любому другому типу объекта.
- Overrides:
-
equalsв классеObject - Parameters:
-
ob- Объект, с которым сравнивается этот буфер - Returns:
-
trueесли и только если этот буфер равен заданному объекту - See Also:
compareTo
public int compareTo(ByteBuffer that)
Два байтовых буфера сравниваются путем сравнения их последовательностей оставшихся элементов лексикографически, без учета начальной позиции каждой последовательности в соответствующем буфере. Пары byte элементов сравниваются так, как если бы вызывался Byte.compare(byte,byte).
Байтовый буфер не может быть сравнен ни с каким другим типом объекта.
- Specified by:
-
compareToв интерфейсеComparable<ByteBuffer> - Parameters:
-
that- объект для сравнения. - Returns:
- Отрицательное целое число, ноль или положительное целое число, если этот буфер меньше, равен или больше заданного буфера
mismatch
public int mismatch(ByteBuffer that)
position каждого буфера и будет в диапазоне от 0 (включительно) до меньшего из remaining элементов в каждом буфере (исключительно). Если два буфера имеют общее префиксное совпадение, возвращаемый индекс равен длине общего префикса, и это означает, что расхождение между двумя буферами возникает на этом индексе в соответствующих буферах. Если один буфер является правильным префиксом другого, возвращаемый индекс равен меньшему из оставшихся элементов в каждом буфере, и это означает, что индекс действителен только для буфера с большим количеством оставшихся элементов. В противном случае расхождения нет.
- Parameters:
-
that- Байтовый буфер, проверяемый на расхождение с этим буфером - Returns:
- Относительный индекс первого расхождения между этим и заданным буфером, в противном случае -1, если расхождения нет.
- Since:
- 11
order
public final ByteOrder order()
Порядок байтов используется при чтении или записи многобайтовых значений и при создании буферов, являющихся представлениями этого байтового буфера. Порядок байтов только что созданного байтового буфера всегда равен BIG_ENDIAN.
- Returns:
- Порядок байтов этого буфера
order
public final ByteBuffer order(ByteOrder bo)
- Parameters:
-
bo- Новый порядок байтов, либоBIG_ENDIAN, либоLITTLE_ENDIAN - Returns:
- Этот буфер
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. - Parameters:
-
index- Индекс для запроса смещения выравнивания, должен быть неотрицательным, проверка на верхние границы не выполняется -
unitSize- Размер блока в байтах, должен быть степенью2 - Returns:
- Адрес памяти байта по индексу по модулю размера блока
- Throws:
-
IllegalArgumentException- Если индекс отрицательный или размер блока не является степенью2 -
UnsupportedOperationException- Если родная платформа не гарантирует стабильные значения смещения выравнивания для данного размера блока при управлении областями памяти буферов того же типа, что и этот буфер (прямой или непрямой). Например, если сборка мусора приведет к перемещению области памяти, покрытой непрямым буфером, из одного места в другое, и оба места имеют разные характеристики выравнивания. - Since:
- 9
- See Also:
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. - Parameters:
-
unitSize- Размер блока в байтах, должен быть степенью2 - Returns:
- Новый байтовый буфер
- Throws:
-
IllegalArgumentException- Если размер блока не является степенью2 -
UnsupportedOperationException- Если родная платформа не гарантирует стабильные выровненные срезы для данного размера блока при управлении областями памяти буферов того же типа, что и этот буфер (прямой или непрямой). Например, если сборка мусора приведет к перемещению области памяти, покрытой непрямым буфером, из одного места в другое, и оба места имеют разные характеристики выравнивания. - Since:
- 9
- See Also:
getChar
public abstract char getChar()
Читает следующие два байта в текущей позиции этого буфера, комбинирует их в значение char в соответствии с текущим порядком байтов и затем увеличивает позицию на два.
- Returns:
- Значение char в текущей позиции буфера
- Throws:
-
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, 2023, 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/21/docs/api/java.base/java/nio/ByteBuffer.html