Spec-Zone.ru › OpenJDK 27

Класс MappedByteBuffer

java.lang.Object
java.nio.Buffer
java.nio.ByteBuffer
java.nio.MappedByteBuffer
Все реализуемые интерфейсы:
Comparable<ByteBuffer>
public abstract sealed class MappedByteBuffer extends ByteBuffer
Прямой байтовый буфер, содержимое которого представляет собой область файла, отображенную в память.

Отображенные байтовые буферы создаются с помощью метода FileChannel.map. Этот класс расширяет класс ByteBuffer, добавляя операции, специфичные для областей файлов, отображенных в память.

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

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

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

В остальном отображенные байтовые буферы ведут себя так же, как обычные прямые байтовые буферы.

С момента появления:
1.4

Краткое описание методов

Модификатор и тип Метод Описание
final MappedByteBuffer clear()
Очищает этот буфер.
abstract MappedByteBuffer compact()
Компактно размещает данные в этом буфере (необязательная операция).
abstract MappedByteBuffer duplicate()
Создает новый байтовый буфер, совместно использующий содержимое этого буфера.
final MappedByteBuffer flip()
Переводит этот буфер в режим чтения.
final MappedByteBuffer force()
Принудительно записывает все изменения содержимого этого буфера на устройство хранения данных, содержащее отображенный файл.
final MappedByteBuffer force(int index, int length)
Принудительно записывает все изменения области содержимого этого буфера на устройство хранения данных, содержащее отображенный файл.
final boolean isLoaded()
Показывает, находится ли содержимое этого буфера в физической памяти.
final MappedByteBuffer limit(int newLimit)
Устанавливает предел этого буфера.
final MappedByteBuffer load()
Загружает содержимое этого буфера в физическую память.
final MappedByteBuffer mark()
Устанавливает отметку в текущей позиции буфера.
final MappedByteBuffer position(int newPosition)
Устанавливает позицию этого буфера.
final MappedByteBuffer reset()
Возвращает позицию этого буфера к ранее отмеченной позиции.
final MappedByteBuffer rewind()
Перематывает этот буфер.
abstract MappedByteBuffer slice()
Создает новый байтовый буфер, содержимое которого представляет собой совместно используемую подпоследовательность содержимого этого буфера.
abstract MappedByteBuffer slice(int index, int length)
Создает новый байтовый буфер, содержимое которого представляет собой совместно используемую подпоследовательность содержимого этого буфера.

Методы, объявленные в классе ByteBuffer

alignedSlice, alignmentOffset, allocate, allocateDirect, array, arrayOffset, asCharBuffer, asDoubleBuffer, asFloatBuffer, asIntBuffer, asLongBuffer, asReadOnlyBuffer, asShortBuffer, compareTo, equals, get, get, get, get, get, get, getChar, getChar, getDouble, getDouble, getFloat, getFloat, getInt, getInt, getLong, getLong, getShort, getShort, hasArray, hashCode, isDirect, mismatch, order, order, put, put, put, put, put, put, put, put, putChar, putChar, putDouble, putDouble, putFloat, putFloat, putInt, putInt, putLong, putLong, putShort, putShort, toString, wrap, wrap
Модификатор и тип Метод Описание
final ByteBuffer alignedSlice(int unitSize)
Создает новый байтовый буфер, содержимое которого представляет собой совместно используемую и выровненную подпоследовательность содержимого этого буфера.
final int alignmentOffset(int index, int unitSize)
Возвращает адрес памяти байта с заданным индексом по модулю заданного размера единицы.
static ByteBuffer allocate(int capacity)
Выделяет новый байтовый буфер.
static ByteBuffer allocateDirect(int capacity)
Выделяет новый прямой байтовый буфер.
final byte[] array()
Возвращает массив байтов, используемый этим буфером (необязательная операция).
final int arrayOffset()
Возвращает смещение первого элемента буфера относительно массива, используемого этим буфером (необязательная операция).
abstract CharBuffer asCharBuffer()
Создает представление этого байтового буфера в виде буфера символов.
abstract DoubleBuffer asDoubleBuffer()
Создает представление этого байтового буфера в виде буфера чисел типа double.
abstract FloatBuffer asFloatBuffer()
Создает представление этого байтового буфера в виде буфера чисел типа float.
abstract IntBuffer asIntBuffer()
Создает представление этого байтового буфера в виде буфера чисел типа int.
abstract LongBuffer asLongBuffer()
Создает представление этого байтового буфера в виде буфера чисел типа long.
abstract ByteBuffer asReadOnlyBuffer()
Создает новый буфер байтов только для чтения, совместно использующий содержимое этого буфера.
abstract ShortBuffer asShortBuffer()
Создает представление этого байтового буфера в виде буфера чисел типа short.
int compareTo(ByteBuffer that)
Сравнивает этот буфер с другим.
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.
ByteBuffer get(int index, byte[] dst)
Абсолютный пакетный метод get.
ByteBuffer get(int index, byte[] dst, int offset, int length)
Абсолютный пакетный метод 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.
final boolean hasArray()
Показывает, использует ли этот буфер доступный массив байтов.
int hashCode()
Возвращает текущий хеш-код этого буфера.
abstract boolean isDirect()
Показывает, является ли этот байтовый буфер прямым.
int mismatch(ByteBuffer that)
Находит и возвращает относительный индекс первого несовпадения между этим буфером и заданным буфером.
final ByteOrder order()
Возвращает порядок байтов этого буфера.
final ByteBuffer order(ByteOrder bo)
Изменяет порядок байтов этого буфера.
abstract ByteBuffer put(byte b)
Относительный метод put (необязательная операция).
final ByteBuffer put(byte[] src)
Относительный пакетный метод put (необязательная операция).
ByteBuffer put(byte[] src, int offset, int length)
Относительный пакетный метод put (необязательная операция).
abstract ByteBuffer put(int index, byte b)
Абсолютный метод put (необязательная операция).
ByteBuffer put(int index, byte[] src)
Абсолютный пакетный метод put (необязательная операция).
ByteBuffer put(int index, byte[] src, int offset, int length)
Абсолютный пакетный метод put (необязательная операция).
ByteBuffer put(int index, ByteBuffer src, int offset, int length)
Абсолютный пакетный метод put (необязательная операция).
ByteBuffer put(ByteBuffer src)
Относительный пакетный метод 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 (необязательная операция).
String toString()
Возвращает строку со сводной информацией о состоянии этого буфера.
static ByteBuffer wrap(byte[] array)
Оборачивает массив байтов в буфер.
static ByteBuffer wrap(byte[] array, int offset, int length)
Оборачивает массив байтов в буфер.

Методы, объявленные в классе Buffer

capacity, hasRemaining, isReadOnly, limit, position, remaining
Модификатор и тип Метод Описание
final int capacity()
Возвращает емкость этого буфера.
final boolean hasRemaining()
Показывает, есть ли элементы между текущей позицией и пределом.
abstract boolean isReadOnly()
Показывает, доступен ли этот буфер только для чтения.
final int limit()
Возвращает предел этого буфера.
final int position()
Возвращает позицию этого буфера.
final int remaining()
Возвращает количество элементов между текущей позицией и пределом.

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени.

Подробное описание методов

isLoaded

public final boolean isLoaded()
Сообщает, находится ли содержимое этого буфера в физической памяти.

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

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

Возвращает:
true, если содержимое этого буфера, вероятно, находится в физической памяти

load

public final MappedByteBuffer load()
Загружает содержимое этого буфера в физическую память.

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

Возвращает:
Этот буфер

force

public final MappedByteBuffer force()
Принудительно записывает все изменения содержимого этого буфера на устройство хранения, содержащее отображённый файл. Область начинается с индекса ноль в этом буфере и имеет размер capacity() байт. Вызов этого метода выполняется точно так же, как вызов force(0,capacity()).

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

Если файл находится не на локальном устройстве, такая гарантия не предоставляется.

Если этот буфер не был отображён в режиме чтения-записи (FileChannel.MapMode.READ_WRITE), вызов этого метода может не иметь эффекта. В частности, метод не действует для буферов, отображённых в режимах только для чтения или частного отображения. Этот метод может как иметь, так и не иметь эффект для специфичных для реализации режимов отображения.

Возвращает:
Этот буфер
Выбрасывает:
UncheckedIOException — если при записи содержимого буфера на устройство хранения, содержащее отображённый файл, происходит ошибка ввода-вывода

force

public final MappedByteBuffer force(int index, int length)
Принудительно записывает все изменения области содержимого этого буфера на устройство хранения, содержащее отображённый файл. Область начинается с заданного index в этом буфере и имеет размер length байт.

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

Если файл находится не на локальном устройстве, такая гарантия не предоставляется.

Если этот буфер не был отображён в режиме чтения-записи (FileChannel.MapMode.READ_WRITE), вызов этого метода может не иметь эффекта. В частности, метод не действует для буферов, отображённых в режимах только для чтения или частного отображения. Этот метод может как иметь, так и не иметь эффект для специфичных для реализации режимов отображения.

Параметры:
index — индекс первого байта области буфера, которую требуется записать в хранилище; должен быть неотрицательным и меньше capacity()
length — длина области в байтах; должна быть неотрицательной и не больше capacity() - index
Возвращает:
Этот буфер
Выбрасывает:
IndexOutOfBoundsException — если не соблюдены предварительные условия для индекса и длины.
UncheckedIOException — если при записи содержимого буфера на устройство хранения, содержащее отображённый файл, происходит ошибка ввода-вывода
Начиная с версии:
13

position

public final MappedByteBuffer position(int newPosition)
Устанавливает позицию этого буфера. Если метка установлена и находится дальше новой позиции, она сбрасывается.
Переопределяет:
position в классе ByteBuffer
Параметры:
newPosition — новое значение позиции; должно быть неотрицательным и не превышать текущий предел
Возвращает:
Этот буфер
Начиная с версии:
9

limit

public final MappedByteBuffer limit(int newLimit)
Устанавливает предел этого буфера. Если позиция больше нового предела, она устанавливается в значение нового предела. Если метка установлена и находится дальше нового предела, она сбрасывается.
Переопределяет:
limit в классе ByteBuffer
Параметры:
newLimit — новое значение предела; должно быть неотрицательным и не превышать ёмкость этого буфера
Возвращает:
Этот буфер
Начиная с версии:
9

mark

public final MappedByteBuffer mark()
Устанавливает метку этого буфера в его текущей позиции.
Переопределяет:
mark в классе ByteBuffer
Возвращает:
Этот буфер
Начиная с версии:
9

reset

public final MappedByteBuffer reset()
Возвращает позицию этого буфера к ранее установленной метке.

Вызов этого метода не изменяет и не сбрасывает значение метки.

Переопределяет:
reset в классе ByteBuffer
Возвращает:
Этот буфер
Начиная с версии:
9

clear

public final MappedByteBuffer clear()
Очищает этот буфер. Позиция устанавливается в ноль, предел устанавливается равным ёмкости, а метка сбрасывается.

Вызовите этот метод перед заполнением буфера последовательностью операций чтения из канала или операций put. Например:

    buf.clear();     // Prepare buffer for reading
    in.read(buf);    // Read data

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

Переопределяет:
clear в классе ByteBuffer
Возвращает:
Этот буфер
Начиная с версии:
9

flip

public final MappedByteBuffer 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 в классе ByteBuffer
Возвращает:
Этот буфер
Начиная с версии:
9

rewind

public final MappedByteBuffer rewind()
Перематывает этот буфер. Позиция устанавливается в ноль, а метка сбрасывается.

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

    out.write(buf);    // Write remaining data
    buf.rewind();      // Rewind buffer
    buf.get(array);    // Copy data into array
Переопределяет:
rewind в классе ByteBuffer
Возвращает:
Этот буфер
Начиная с версии:
9

slice

public abstract MappedByteBuffer slice()
Создаёт новый байтовый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера.

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

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

Чтение байтов в физическую память посредством вызова load() для возвращённого буфера или запись байтов на устройство хранения посредством вызова force() для возвращённого буфера будут затрагивать только поддиапазон этого буфера, представленный возвращённым буфером, а именно [position(),limit()).

Указано в:
slice в классе ByteBuffer
Возвращает:
Новый байтовый буфер
Начиная с версии:
17
См. также:
  • ByteBuffer.alignedSlice(int)

slice

public abstract MappedByteBuffer slice(int index, int length)
Создаёт новый байтовый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера.

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

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

Чтение байтов в физическую память посредством вызова load() для возвращённого буфера или запись байтов на устройство хранения посредством вызова force() для возвращённого буфера будут затрагивать только поддиапазон этого буфера, представленный возвращённым буфером, а именно [index,index+length), где предполагается, что index и length удовлетворяют предварительным условиям.

Указано в:
slice в классе ByteBuffer
Параметры:
index — позиция в этом буфере, с которой будет начинаться содержимое нового буфера; должна быть неотрицательной и не превышать limit()
length — число элементов, которое будет содержать новый буфер; должно быть неотрицательным и не превышать limit() - index
Возвращает:
Новый буфер
Начиная с версии:
17

duplicate

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

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

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

Указано в:
duplicate в классе ByteBuffer
Возвращает:
Новый байтовый буфер
Начиная с версии:
17

compact

public abstract MappedByteBuffer 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
    }
Указано в:
compact в классе ByteBuffer
Возвращает:
Этот буфер
Выбрасывает:
ReadOnlyBufferException — если этот буфер доступен только для чтения
Начиная с версии:
17

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, в том числе концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

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