Spec-Zone.ru › OpenJDK 8

Класс ByteBuffer

  • java.lang.Object
    • java.nio.Buffer
      • java.nio.ByteBuffer
Все реализованные интерфейсы:
Comparable<ByteBuffer>
Известные непосредственные подклассы:
MappedByteBuffer

public abstract class ByteBuffer
extends Buffer
implements Comparable<ByteBuffer>

Буфер байтов.

Этот класс определяет шесть категорий операций с буферами байтов:

  • Абсолютные и относительные методы get и put, которые читают и записывают отдельные байты;

  • Относительные методы bulk get, которые передают непрерывные последовательности байтов из этого буфера в массив;

  • Относительные методы bulk put, которые передают непрерывные последовательности байтов из массива байтов или другого буфера байтов в этот буфер;

  • Абсолютные и относительные методы get и put, которые читают и записывают значения других примитивных типов, переводя их в последовательности байтов и обратно в соответствии с определенным порядком байтов;

  • Методы для создания видовых буферов, которые позволяют рассматривать буфер байтов как буфер, содержащий значения некоторого другого примитивного типа; и

  • Методы для compacting, duplicating и slicing буфера байтов.

Буферы байтов могут быть созданы либо с помощью allocation, который выделяет память для содержимого буфера, либо с помощью wrapping существующего массива байтов в буфер.

Прямые против непрямых буферов

Буфер байтов может быть прямым или непрямым. В случае прямого буфера байтов виртуальная машина Java постарается выполнить операции ввода-вывода напрямую с ним. То есть она постарается избежать копирования содержимого буфера в (или из) промежуточного буфера перед (или после) каждого вызова одной из нативных операций ввода-вывода операционной системы.

Прямой буфер байтов может быть создан с помощью метода-фабрики allocateDirect этого класса. Буферы, возвращаемые этим методом, обычно имеют несколько более высокие затраты на выделение и освобождение памяти, чем непрямые буферы. Содержимое прямых буферов может находиться вне обычной области управляемой сборкой мусора кучи, поэтому их влияние на область памяти приложения может быть не очевидным. Поэтому рекомендуется выделять прямые буферы в основном для больших долгоживущих буферов, которые подлежат нативным операциям ввода-вывода подсистемы. В общем случае лучше выделять прямые буферы только тогда, когда это приводит к измеримому улучшению производительности программы.

Прямой буфер байтов также может быть создан с помощью mapping области файла непосредственно в памяти. Реализация платформы Java может по желанию поддерживать создание прямых буферов байтов из кода нативных систем через JNI. Если экземпляр одного из этих типов буферов ссылается на недоступную область памяти, то попытка доступа к этой области не изменит содержимое буфера и вызовет непредсказуемое исключение либо в момент доступа, либо в какой-то момент позже.

Можно определить, является ли буфер байтов прямым или непрямым, вызвав его метод isDirect. Этот метод предоставляется для того, чтобы можно было осуществлять явное управление буферами в критичных к производительности участках кода.

Доступ к двоичным данным

Этот класс определяет методы для чтения и записи значений всех других примитивных типов, кроме boolean. Примитивные значения преобразуются в (или из) последовательностей байтов в соответствии с текущим порядком байтов буфера, который можно получить и изменить с помощью методов order. Специфические порядки байтов представлены экземплярами класса ByteOrder. Начальный порядок буфера байтов всегда BIG_ENDIAN.

Для доступа к неоднородным двоичным данным, то есть к последовательностям значений разных типов, этот класс определяет семейство абсолютных и относительных методов get и put для каждого типа. Например, для 32-битовых чисел с плавающей запятой этот класс определяет:

float  getFloat()
float  getFloat(int index)
 void  putFloat(float f)
 void  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);
С:
1.4

Методы

Модификатор и тип Метод и описание
static ByteBuffer allocate(int capacity)

Выделяет новый байтовый буфер.

static ByteBuffer allocateDirect(int capacity)

Выделяет новый прямой байтовый буфер.

byte[] array()

Возвращает массив байтов, на котором основан этот буфер (необязательная операция).

int arrayOffset()

Возвращает смещение в массиве, на котором основан этот буфер, первого элемента буфера (необязательная операция).

abstract CharBuffer asCharBuffer()

Создаёт представление этого байтового буфера как буфера символов.

abstract DoubleBuffer asDoubleBuffer()

Создаёт представление этого байтового буфера как буфера с двойной точностью.

abstract FloatBuffer asFloatBuffer()

Создаёт представление этого байтового буфера как буфера с одинарной точностью.

abstract IntBuffer asIntBuffer()

Создаёт представление этого байтового буфера как буфера целых чисел.

abstract LongBuffer asLongBuffer()

Создаёт представление этого байтового буфера как буфера длинных целых чисел.

abstract ByteBuffer asReadOnlyBuffer()

Создаёт новый, только для чтения, байтовый буфер, который совместно использует содержимое этого буфера.

abstract ShortBuffer asShortBuffer()

Создаёт представление этого байтового буфера как буфера коротких целых чисел.

abstract ByteBuffer compact()

Уплотняет этот буфер (необязательная операция).

int compareTo(ByteBuffer that)

Сравнивает этот буфер с другим.

abstract ByteBuffer duplicate()

Создаёт новый байтовый буфер, который совместно использует содержимое этого буфера.

boolean equals(Object ob)

Определяет, равен ли этот буфер другому объекту.

abstract byte get()

Метод get с относительным смещением.

ByteBuffer get(byte[] dst)

Метод get для пакетного считывания с относительным смещением.

ByteBuffer get(byte[] dst, int offset, int length)

Метод get для пакетного считывания с относительным смещением.

abstract byte get(int index)

Метод get с абсолютным смещением.

abstract char getChar()

Метод get с относительным смещением для чтения значения типа char.

abstract char getChar(int index)

Метод get с абсолютным смещением для чтения значения типа char.

abstract double getDouble()

Метод get с относительным смещением для чтения значения типа double.

abstract double getDouble(int index)

Метод get с абсолютным смещением для чтения значения типа double.

abstract float getFloat()

Метод get с относительным смещением для чтения значения типа float.

abstract float getFloat(int index)

Метод get с абсолютным смещением для чтения значения типа float.

abstract int getInt()

Метод get с относительным смещением для чтения значения типа int.

abstract int getInt(int index)

Метод get с абсолютным смещением для чтения значения типа int.

abstract long getLong()

Метод get с относительным смещением для чтения значения типа long.

abstract long getLong(int index)

Метод get с абсолютным смещением для чтения значения типа long.

abstract short getShort()

Метод get с относительным смещением для чтения значения типа short.

abstract short getShort(int index)

Метод get с абсолютным смещением для чтения значения типа short.

boolean hasArray()

Определяет, поддерживает ли этот буфер доступный массив байтов.

int hashCode()

Возвращает текущий хэш-код этого буфера.

abstract boolean isDirect()

Определяет, является ли этот байтовый буфер прямым.

ByteOrder order()

Возвращает порядок байтов этого буфера.

ByteBuffer order(ByteOrder bo)

Изменяет порядок байтов этого буфера.

abstract ByteBuffer put(byte b)

Метод put с относительным смещением (необязательная операция).

ByteBuffer put(byte[] src)

Метод put для пакетной записи с относительным смещением (необязательная операция).

ByteBuffer put(byte[] src, int offset, int length)

Метод put для пакетной записи с относительным смещением (необязательная операция).

ByteBuffer put(ByteBuffer src)

Метод put для пакетной записи с относительным смещением (необязательная операция).

abstract ByteBuffer put(int index, byte b)

Метод put с абсолютным смещением (необязательная операция).

abstract ByteBuffer putChar(char value)

Метод put с относительным смещением для записи значения типа char (необязательная операция).

abstract ByteBuffer putChar(int index, char value)

Метод put с абсолютным смещением для записи значения типа char (необязательная операция).

abstract ByteBuffer putDouble(double value)

Метод put с относительным смещением для записи значения типа double (необязательная операция).

abstract ByteBuffer putDouble(int index, double value)

Метод put с абсолютным смещением для записи значения типа double (необязательная операция).

abstract ByteBuffer putFloat(float value)

Метод put с относительным смещением для записи значения типа float (необязательная операция).

abstract ByteBuffer putFloat(int index, float value)

Метод put с абсолютным смещением для записи значения типа float (необязательная операция).

abstract ByteBuffer putInt(int value)

Метод put с относительным смещением для записи значения типа int (необязательная операция).

abstract ByteBuffer putInt(int index, int value)

Метод put с абсолютным смещением для записи значения типа int (необязательная операция).

abstract ByteBuffer putLong(int index, long value)

Метод put с абсолютным смещением для записи значения типа long (необязательная операция).

abstract ByteBuffer putLong(long value)

Метод put с относительным смещением для записи значения типа long (необязательная операция).

abstract ByteBuffer putShort(int index, short value)

Метод put с абсолютным смещением для записи значения типа short (необязательная операция).

abstract ByteBuffer putShort(short value)

Метод put с относительным смещением для записи значения типа short (необязательная операция).

abstract ByteBuffer slice()

Создаёт новый байтовый буфер, содержащий совместно используемую подпоследовательность содержимого этого буфера.

String toString()

Возвращает строку, описывающую состояние этого буфера.

static ByteBuffer wrap(byte[] array)

Оборачивает массив байтов в буфер.

static ByteBuffer wrap(byte[] array, int offset, int length)

Оборачивает массив байтов в буфер.

Методы, унаследованные от класса java.nio.Buffer

capacity, clear, flip, hasRemaining, isReadOnly, limit, limit, mark, position, position, remaining, reset, rewind

Методы, унаследованные от класса java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Методы

allocateDirect

public static ByteBuffer allocateDirect(int capacity)

Выделяет новый буфер байтов прямого доступа.

Позиция нового буфера будет равна нулю, предел — его емкости, метка — неопределена, и каждый его элемент будет инициализирован нулем. Наличие массива backing array не определено.

Параметры:
capacity - Емкость нового буфера в байтах
Возвращает:
Новый буфер байтов
Исключения:
IllegalArgumentException - Если емкость — отрицательное целое число

allocate

public static ByteBuffer allocate(int capacity)

Выделяет новый буфер байтов.

Позиция нового буфера будет равна нулю, предел — его емкости, метка — неопределена, и каждый его элемент будет инициализирован нулем. Буфер будет иметь backing array, и его array offset будет равен нулю.

Параметры:
capacity - Емкость нового буфера в байтах
Возвращает:
Новый буфер байтов
Исключения:
IllegalArgumentException - Если емкость — отрицательное целое число

wrap

public static ByteBuffer wrap(byte[] array,
                              int offset,
                              int length)

Оборачивает массив байтов в буфер.

Новый буфер будет опираться на заданный массив байтов; то есть изменения в буфере приведут к изменению массива и наоборот. Емкость нового буфера будет array.length, его позиция — offset, предел — offset + length, а метка — неопределена. Его 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, его позиция — нулём, а метка — неопределена. Его backing array будет заданным массивом, а array offset> — нулём.

Параметры:
array - Массив, который будет основой этого буфера
Возвращает:
Новый буфер байтов

slice

public abstract ByteBuffer slice()

Создает новый буфер байтов, содержащий совмещенную подпоследовательность содержимого этого буфера.

Содержимое нового буфера начнется с текущей позиции этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимыми.

Позиция нового буфера будет равна нулю, его емкость и предел будут равны количеству оставшихся байтов в этом буфере, а метка — неопределена. Новый буфер будет прямым, если и только если этот буфер является прямым, и он будет только для чтения, если и только если этот буфер является только для чтения.

Возвращает:
Новый буфер байтов

duplicate

public abstract ByteBuffer duplicate()

Создает новый буфер байтов, совместно использующий содержимое этого буфера.

Содержимое нового буфера будет таким же, как у этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; значения позиции, предела и метки двух буферов будут независимыми.

Значения емкости, предела, позиции и метки нового буфера будут идентичны значениям этого буфера. Новый буфер будет прямым, если и только если этот буфер является прямым, и он будет только для чтения, если и только если этот буфер является только для чтения.

Возвращает:
Новый буфер байтов

asReadOnlyBuffer

public abstract ByteBuffer asReadOnlyBuffer()

Создает новый буфер байтов только для чтения, совместно использующий содержимое этого буфера.

Содержимое нового буфера будет таким же, как у этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере; однако сам новый буфер будет только для чтения и не позволит изменять совместно используемое содержимое. Значения позиции, предела и метки двух буферов будут независимыми.

Значения емкости, предела, позиции и метки нового буфера будут идентичны значениям этого буфера.

Если этот буфер сам по себе предназначен только для чтения, то этот метод ведет себя точно так же, как метод duplicate.

Возвращает:
Новый буфер байтов только для чтения

get

public abstract byte get()

Относительный метод get. Считывает байт в текущей позиции буфера и затем увеличивает позицию.

Возвращает:
Байт в текущей позиции буфера
Исключения:
BufferUnderflowException - Если текущая позиция буфера не меньше его предела

put

public abstract ByteBuffer put(byte b)

Относительный метод put (необязательная операция).

Записывает заданный байт в этот буфер в текущей позиции и затем увеличивает позицию.

Параметры:
b - Байты для записи
Возвращает:
Этот буфер
Исключения:
BufferOverflowException - Если текущая позиция буфера не меньше его предела
ReadOnlyBufferException - Если этот буфер предназначен только для чтения

get

public abstract byte get(int index)

Абсолютный метод get. Считывает байт по заданному индексу.

Параметры:
index - Индекс, с которого будет считан байт
Возвращает:
Байт по заданному индексу
Исключения:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера

put

public abstract ByteBuffer put(int index,
                               byte b)

Абсолютный метод put (необязательная операция).

Записывает заданный байт в этот буфер по заданному индексу.

Параметры:
index - Индекс, по которому будет записан байт
b - Значение байта для записи
Возвращает:
Этот буфер
Исключения:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера
ReadOnlyBufferException - Если этот буфер предназначен только для чтения

get

public ByteBuffer get(byte[] dst,
                      int offset,
                      int length)

Относительный метод get для обработки блоков.

Этот метод копирует байты из этого буфера в заданный массив назначения. Если оставшихся байтов в буфере меньше, чем требуется для выполнения запроса, то есть, если 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)

Относительный метод get для обработки блоков.

Этот метод копирует байты из этого буфера в заданный массив назначения. Вызов этого метода в виде src.get(a) ведет себя точно так же, как вызов

src.get(a, 0, a.length)
Параметры:
dst - Массив назначения
Возвращает:
Этот буфер
Исключения:
BufferUnderflowException - Если оставшихся байтов в этом буфере меньше, чем length

put

public ByteBuffer put(ByteBuffer src)

Относительный метод put для обработки блоков (необязательная операция).

Этот метод копирует оставшиеся байты из заданного буфера-источника в этот буфер. Если оставшихся байтов в буфере-источнике больше, чем в этом буфере, то есть, если 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(byte[] src,
                      int offset,
                      int length)

Метод put для относительного копирования большого объёма данных (необязательная операция).

Этот метод копирует байты из заданного исходного массива в этот буфер. Если для копирования из массива необходимо больше байтов, чем осталось в этом буфере, то есть, если length > remaining(), то байты не копируются и выбрасывается исключение BufferOverflowException.

В противном случае, этот метод копирует length байта из заданного массива в этот буфер, начиная с заданного смещения в массиве и текущей позиции в этом буфере. Затем позиция этого буфера увеличивается на length.

Другими словами, вызов этого метода в форме dst.put(src, off, len) имеет точно такой же эффект, как цикл

for (int i = off; i < off + len; i++)
         dst.put(a[i]);
за исключением того, что он сначала проверяет наличие достаточного места в этом буфере и потенциально гораздо эффективнее.
Параметры:
src - Массив, из которого считываются байты
offset - Смещение в массиве первого считываемого байта; должно быть неотрицательным и не больше array.length
length - Количество байтов, которые должны быть считанны из заданного массива; должно быть неотрицательным и не больше array.length - offset
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в этом буфере недостаточно места
IndexOutOfBoundsException - Если условия на offset и length параметры не выполнены
ReadOnlyBufferException - Если этот буфер только для чтения

put

public final ByteBuffer put(byte[] src)

Метод put для относительного копирования большого объёма данных (необязательная операция).

Этот метод копирует всё содержимое заданного исходного массива байтов в этот буфер. Вызов этого метода в форме dst.put(a) ведет себя точно так же, как вызов

dst.put(a, 0, a.length)
Параметры:
src - Исходный массив
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в этом буфере недостаточно места
ReadOnlyBufferException - Если этот буфер только для чтения

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 - Если этот буфер не поддерживается доступным массивом

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.

Поскольку коды хеширования буферов зависят от содержимого, не рекомендуется использовать буферы в качестве ключей в хэш-картах или аналогичных структурах данных, если не известно, что их содержимое не изменится.

Переопределяет:
hashCode в классе Object
Возвращает:
Текущий код хеширования этого буфера
См. также:
Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)

equals

public boolean equals(Object ob)

Указывает, равен ли этот буфер другому объекту.

Два буфера байтов равны тогда и только тогда, когда

  1. Они имеют одинаковый тип элемента,

  2. Они имеют одинаковое количество оставшихся элементов, и

  3. Две последовательности оставшихся элементов, рассматриваемые независимо от своих начальных позиций, равны попарно.

Буфер байтов не равен любому другому типу объекта.

Переопределяет:
equals в классе Object
Параметры:
ob - Объект, с которым должен быть сравнен этот буфер
Возвращает:
true если и только если этот буфер равен заданному объекту
См. также:
Object.hashCode(), HashMap

compareTo

public int compareTo(ByteBuffer that)

Сравнивает этот буфер с другим.

Два буфера байтов сравниваются путём лексикографического сравнения их последовательностей оставшихся элементов без учёта начальной позиции каждой последовательности в соответствующем буфере. Пары элементов byte сравниваются так, как если бы вызывался Byte.compare(byte,byte).

Буфер байтов не сравним ни с каким другим типом объекта.

Определено в:
compareTo в интерфейсе Comparable<ByteBuffer>
Параметры:
that - объект, который подлежит сравнению.
Возвращает:
Отрицательное целое число, ноль или положительное целое число, так как этот буфер меньше, равен или больше, чем заданный буфер

order

public final ByteOrder order()

Получает порядок байтов этого буфера.

Порядок байтов используется при чтении или записи многобайтовых значений и при создании буферов, которые являются представлениями этого буфера байтов. Порядок байтов вновь созданного буфера байтов всегда равен BIG_ENDIAN.

Возвращает:
Порядок байтов этого буфера

order

public final ByteBuffer order(ByteOrder bo)

Изменяет порядок байтов этого буфера.

Параметры:
bo - Новый порядок байтов, либо BIG_ENDIAN, либо LITTLE_ENDIAN
Возвращает:
Этот буфер

getChar

public abstract char getChar()

Относительный метод get для чтения значения char.

Читает следующие два байта в текущей позиции этого буфера, объединяет их в значение char в соответствии с текущим порядком байтов, а затем увеличивает позицию на два.

Возвращает:
Значение char в текущей позиции буфера
Выбрасывает:
BufferUnderflowException - Если в этом буфере осталось меньше двух байтов

putChar

public abstract ByteBuffer putChar(char value)

Относительный метод put для записи значения char (необязательная операция).

Записывает два байта, содержащие заданное значение char, в текущем порядке байтов, в этот буфер по текущей позиции, а затем увеличивает позицию на два.

Параметры:
value - Значение char, которое должно быть записано
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в этом буфере осталось меньше двух байтов
ReadOnlyBufferException - Если этот буфер только для чтения

getChar

public abstract char getChar(int index)

Абсолютный метод get для чтения значения char.

Читает два байта по заданному индексу, объединяет их в значение char в соответствии с текущим порядком байтов.

Параметры:
index - Индекс, с которого будут считываться байты
Возвращает:
Значение char в указанном индексе
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус один

putChar

public abstract ByteBuffer putChar(int index,
                                   char value)

Абсолютный метод put для записи значения char (необязательная операция).

Записывает два байта, содержащие заданное значение char, в текущем порядке байтов, в этот буфер по заданному индексу.

Параметры:
index - Индекс, в который будут записаны байты
value - Значение char, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус один
ReadOnlyBufferException - Если этот буфер только для чтения

asCharBuffer

public abstract CharBuffer asCharBuffer()

Создаёт представление этого байтового буфера как буфера char.

Содержимое нового буфера начнётся с текущей позиции этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимыми.

Позиция нового буфера будет нулевой, его ёмкость и предел будут равны количеству оставшихся байтов в этом буфере, делённому на два, а метка будет неопределённой. Новый буфер будет прямым только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер только для чтения.

Возвращает:
Новый буфер char

getShort

public abstract short getShort()

Относительный метод get для чтения значения short.

Считывает следующие два байта в текущей позиции этого буфера, объединяет их в значение short в соответствии с текущим порядком байтов, а затем увеличивает позицию на два.

Возвращает:
Значение short в текущей позиции буфера
Выбрасывает:
BufferUnderflowException - Если в этом буфере меньше двух байтов

putShort

public abstract ByteBuffer putShort(short value)

Относительный метод put для записи значения short (необязательная операция).

Записывает два байта, содержащие заданное значение short, в текущем порядке байтов, в этот буфер по текущей позиции, а затем увеличивает позицию на два.

Параметры:
value - Значение short, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в этом буфере меньше двух байтов
ReadOnlyBufferException - Если этот буфер только для чтения

getShort

public abstract short getShort(int index)

Абсолютный метод get для чтения значения short.

Считывает два байта по заданному индексу, объединяет их в значение short в соответствии с текущим порядком байтов.

Параметры:
index - Индекс, с которого будут считываться байты
Возвращает:
Значение short в указанном индексе
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус один

putShort

public abstract ByteBuffer putShort(int index,
                                    short value)

Абсолютный метод put для записи значения short (необязательная операция).

Записывает два байта, содержащие заданное значение short, в текущем порядке байтов, в этот буфер по заданному индексу.

Параметры:
index - Индекс, в который будут записаны байты
value - Значение short, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус один
ReadOnlyBufferException - Если этот буфер только для чтения

asShortBuffer

public abstract ShortBuffer asShortBuffer()

Создаёт представление этого байтового буфера как буфера short.

Содержимое нового буфера начнётся с текущей позиции этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимыми.

Позиция нового буфера будет нулевой, его ёмкость и предел будут равны количеству оставшихся байтов в этом буфере, делённому на два, а метка будет неопределённой. Новый буфер будет прямым только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер только для чтения.

Возвращает:
Новый буфер short

getInt

public abstract int getInt()

Относительный метод get для чтения значения int.

Считывает следующие четыре байта в текущей позиции этого буфера, объединяет их в значение int в соответствии с текущим порядком байтов, а затем увеличивает позицию на четыре.

Возвращает:
Значение int в текущей позиции буфера
Выбрасывает:
BufferUnderflowException - Если в этом буфере меньше четырёх байтов

putInt

public abstract ByteBuffer putInt(int value)

Относительный метод put для записи значения int (необязательная операция).

Записывает четыре байта, содержащие заданное значение int, в текущем порядке байтов, в этот буфер по текущей позиции, а затем увеличивает позицию на четыре.

Параметры:
value - Значение int, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в этом буфере меньше четырёх байтов
ReadOnlyBufferException - Если этот буфер только для чтения

getInt

public abstract int getInt(int index)

Абсолютный метод get для чтения значения int.

Считывает четыре байта по заданному индексу, объединяет их в значение int в соответствии с текущим порядком байтов.

Параметры:
index - Индекс, с которого будут считываться байты
Возвращает:
Значение int в указанном индексе
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус три

putInt

public abstract ByteBuffer putInt(int index,
                                  int value)

Абсолютный метод put для записи значения int (необязательная операция).

Записывает четыре байта, содержащие заданное значение int, в текущем порядке байтов, в этот буфер по заданному индексу.

Параметры:
index - Индекс, в который будут записаны байты
value - Значение int, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус три
ReadOnlyBufferException - Если этот буфер только для чтения

asIntBuffer

public abstract IntBuffer asIntBuffer()

Создаёт представление этого байтового буфера как буфера int.

Содержимое нового буфера начнётся с текущей позиции этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимыми.

Позиция нового буфера будет нулевой, его ёмкость и предел будут равны количеству оставшихся байтов в этом буфере, делённому на четыре, а метка будет неопределённой. Новый буфер будет прямым только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер только для чтения.

Возвращает:
Новый буфер int

getLong

public abstract long getLong()

Относительный метод get для чтения значения long.

Считывает следующие восемь байтов в текущей позиции этого буфера, объединяет их в значение long в соответствии с текущим порядком байтов, а затем увеличивает позицию на восемь.

Возвращает:
Значение long в текущей позиции буфера
Выбрасывает:
BufferUnderflowException - Если в этом буфере меньше восьми байтов

putLong

public abstract ByteBuffer putLong(long value)

Относительный метод put для записи значения long (необязательная операция).

Записывает восемь байтов, содержащих заданное значение long, в текущем порядке байтов, в этот буфер по текущей позиции, а затем увеличивает позицию на восемь.

Параметры:
value - Значение long, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в этом буфере меньше восьми байтов
ReadOnlyBufferException - Если этот буфер только для чтения

getLong

public abstract long getLong(int index)

Абсолютный метод get для чтения значения long.

Считывает восемь байтов по заданному индексу, объединяет их в значение long в соответствии с текущим порядком байтов.

Параметры:
index - Индекс, с которого будут считываться байты
Возвращает:
Значение long в указанном индексе
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус семь

putLong

public abstract ByteBuffer putLong(int index,
                                   long value)

Абсолютный метод put для записи значения long (необязательная операция).

Записывает восемь байтов, содержащих заданное значение long, в текущем порядке байтов, в этот буфер по заданному индексу.

Параметры:
index - Индекс, в который будут записаны байты
value - Значение long, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException - Если index отрицательный или не меньше предела буфера, минус семь
ReadOnlyBufferException - Если этот буфер только для чтения

asLongBuffer

public abstract LongBuffer asLongBuffer()

Создаёт представление этого байтового буфера как буфера long.

Содержимое нового буфера начнётся с текущей позиции этого буфера. Изменения в содержимом этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимыми.

Позиция нового буфера будет нулевой, его ёмкость и предел будут равны количеству оставшихся байтов в этом буфере, делённому на восемь, а метка будет неопределённой. Новый буфер будет прямым только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер только для чтения.

Возвращает:
Новый буфер long

getFloat

public abstract float getFloat()

Относительный метод get для чтения значения float.

Считывает следующие четыре байта в текущей позиции этого буфера, объединяет их в значение float в соответствии с текущим порядком байтов, а затем увеличивает позицию на четыре.

Возвращает:
Значение float в текущей позиции буфера
Выбрасывает:
BufferUnderflowException - Если в буфере осталось меньше четырёх байтов

putFloat

public abstract ByteBuffer putFloat(float value)

Относительный метод put для записи значения float (необязательная операция).

Записывает четыре байта, содержащие заданное значение float в текущем порядке байтов, в этот буфер в текущей позиции и затем увеличивает позицию на четыре.

Параметры:
value - Значение float, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в буфере осталось меньше четырёх байтов
ReadOnlyBufferException - Если этот буфер только для чтения

getFloat

public abstract float getFloat(int index)

Абсолютный метод get для чтения значения float.

Читает четыре байта в заданном индексе, формируя из них значение float в соответствии с текущим порядком байтов.

Параметры:
index - Индекс, с которого будут считываться байты
Возвращает:
Значение float в заданном индексе
Выбрасывает:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера, минус три

putFloat

public abstract ByteBuffer putFloat(int index,
                                    float value)

Абсолютный метод put для записи значения float (необязательная операция).

Записывает четыре байта, содержащие заданное значение float в текущем порядке байтов, в этот буфер в заданном индексе.

Параметры:
index - Индекс, в который будут записаны байты
value - Значение float, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера, минус три
ReadOnlyBufferException - Если этот буфер только для чтения

asFloatBuffer

public abstract FloatBuffer asFloatBuffer()

Создаёт представление этого буфера байтов как буфера float.

Содержание нового буфера начнётся в текущей позиции этого буфера. Изменения в содержании этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимы.

Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны числу оставшихся байтов в этом буфере, делённому на четыре, а метка — неопределённой. Новый буфер будет прямым тогда и только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер только для чтения.

Возвращает:
Новый буфер float

getDouble

public abstract double getDouble()

Относительный метод get для чтения значения double.

Читает следующие восемь байтов в текущей позиции этого буфера, формирует из них значение double в соответствии с текущим порядком байтов и затем увеличивает позицию на восемь.

Возвращает:
Значение double в текущей позиции буфера
Выбрасывает:
BufferUnderflowException - Если в буфере осталось меньше восьми байтов

putDouble

public abstract ByteBuffer putDouble(double value)

Относительный метод put для записи значения double (необязательная операция).

Записывает восемь байтов, содержащих заданное значение double в текущем порядке байтов, в этот буфер в текущей позиции и затем увеличивает позицию на восемь.

Параметры:
value - Значение double, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
BufferOverflowException - Если в буфере осталось меньше восьми байтов
ReadOnlyBufferException - Если этот буфер только для чтения

getDouble

public abstract double getDouble(int index)

Абсолютный метод get для чтения значения double.

Читает восемь байтов в заданном индексе, формируя из них значение double в соответствии с текущим порядком байтов.

Параметры:
index - Индекс, с которого будут считываться байты
Возвращает:
Значение double в заданном индексе
Выбрасывает:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера, минус семь

putDouble

public abstract ByteBuffer putDouble(int index,
                                     double value)

Абсолютный метод put для записи значения double (необязательная операция).

Записывает восемь байтов, содержащих заданное значение double в текущем порядке байтов, в этот буфер в заданном индексе.

Параметры:
index - Индекс, в который будут записаны байты
value - Значение double, которое нужно записать
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException - Если index отрицателен или не меньше предела буфера, минус семь
ReadOnlyBufferException - Если этот буфер только для чтения

asDoubleBuffer

public abstract DoubleBuffer asDoubleBuffer()

Создаёт представление этого буфера байтов как буфера double.

Содержание нового буфера начнётся в текущей позиции этого буфера. Изменения в содержании этого буфера будут видны в новом буфере, и наоборот; позиции, пределы и метки двух буферов будут независимы.

Позиция нового буфера будет равна нулю, его ёмкость и предел будут равны числу оставшихся байтов в этом буфере, делённому на восемь, а метка — неопределённой. Новый буфер будет прямым тогда и только тогда, когда этот буфер является прямым, и он будет только для чтения, если и только если этот буфер только для чтения.

Возвращает:
Новый буфер double

© 1993, 2020, 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API