Класс 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 |
Принудительно записывает все изменения области содержимого этого буфера на устройство хранения данных, содержащее отображенный файл. |
final boolean |
isLoaded() |
Показывает, находится ли содержимое этого буфера в физической памяти. |
final MappedByteBuffer |
limit |
Устанавливает предел этого буфера. |
final MappedByteBuffer |
load() |
Загружает содержимое этого буфера в физическую память. |
final MappedByteBuffer |
mark() |
Устанавливает отметку в текущей позиции буфера. |
final MappedByteBuffer |
position |
Устанавливает позицию этого буфера. |
final MappedByteBuffer |
reset() |
Возвращает позицию этого буфера к ранее отмеченной позиции. |
final MappedByteBuffer |
rewind() |
Перематывает этот буфер. |
abstract MappedByteBuffer |
slice() |
Создает новый байтовый буфер, содержимое которого представляет собой совместно используемую подпоследовательность содержимого этого буфера. |
abstract MappedByteBuffer |
slice |
Создает новый байтовый буфер, содержимое которого представляет собой совместно используемую подпоследовательность содержимого этого буфера. |
Методы, объявленные в классе 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 |
Создает новый байтовый буфер, содержимое которого представляет собой совместно используемую и выровненную подпоследовательность содержимого этого буфера. |
final int |
alignmentOffset |
Возвращает адрес памяти байта с заданным индексом по модулю заданного размера единицы. |
static ByteBuffer |
allocate |
Выделяет новый байтовый буфер. |
static ByteBuffer |
allocateDirect |
Выделяет новый прямой байтовый буфер. |
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 |
Сравнивает этот буфер с другим. |
boolean |
equals |
Показывает, равен ли этот буфер другому объекту. |
abstract byte |
get() |
Относительный метод get. |
ByteBuffer |
get |
Относительный пакетный метод get. |
ByteBuffer |
get |
Относительный пакетный метод get. |
abstract byte |
get |
Абсолютный метод get. |
ByteBuffer |
get |
Абсолютный пакетный метод get. |
ByteBuffer |
get |
Абсолютный пакетный метод get. |
abstract char |
getChar() |
Относительный метод get для чтения значения типа char. |
abstract char |
getChar |
Абсолютный метод get для чтения значения типа char. |
abstract double |
getDouble() |
Относительный метод get для чтения значения типа double. |
abstract double |
getDouble |
Абсолютный метод get для чтения значения типа double. |
abstract float |
getFloat() |
Относительный метод get для чтения значения типа float. |
abstract float |
getFloat |
Абсолютный метод get для чтения значения типа float. |
abstract int |
getInt() |
Относительный метод get для чтения значения типа int. |
abstract int |
getInt |
Абсолютный метод get для чтения значения типа int. |
abstract long |
getLong() |
Относительный метод get для чтения значения типа long. |
abstract long |
getLong |
Абсолютный метод get для чтения значения типа long. |
abstract short |
getShort() |
Относительный метод get для чтения значения типа short. |
abstract short |
getShort |
Абсолютный метод get для чтения значения типа short. |
final boolean |
hasArray() |
Показывает, использует ли этот буфер доступный массив байтов. |
int |
hashCode() |
Возвращает текущий хеш-код этого буфера. |
abstract boolean |
isDirect() |
Показывает, является ли этот байтовый буфер прямым. |
int |
mismatch |
Находит и возвращает относительный индекс первого несовпадения между этим буфером и заданным буфером. |
final ByteOrder |
order() |
Возвращает порядок байтов этого буфера. |
final ByteBuffer |
order |
Изменяет порядок байтов этого буфера. |
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 для записи значения типа char (необязательная операция). |
abstract ByteBuffer |
putChar |
Абсолютный метод put для записи значения типа char (необязательная операция). |
abstract ByteBuffer |
putDouble |
Относительный метод put для записи значения типа double (необязательная операция). |
abstract ByteBuffer |
putDouble |
Абсолютный метод put для записи значения типа double (необязательная операция). |
abstract ByteBuffer |
putFloat |
Относительный метод put для записи значения типа float (необязательная операция). |
abstract ByteBuffer |
putFloat |
Абсолютный метод put для записи значения типа float (необязательная операция). |
abstract ByteBuffer |
putInt |
Относительный метод put для записи значения типа int (необязательная операция). |
abstract ByteBuffer |
putInt |
Абсолютный метод put для записи значения типа int (необязательная операция). |
abstract ByteBuffer |
putLong |
Абсолютный метод put для записи значения типа long (необязательная операция). |
abstract ByteBuffer |
putLong |
Относительный метод put для записи значения типа long (необязательная операция). |
abstract ByteBuffer |
putShort |
Абсолютный метод put для записи значения типа short (необязательная операция). |
abstract ByteBuffer |
putShort |
Относительный метод put для записи значения типа short (необязательная операция). |
String |
toString() |
Возвращает строку со сводной информацией о состоянии этого буфера. |
static ByteBuffer |
wrap |
Оборачивает массив байтов в буфер. |
static ByteBuffer |
wrap |
Оборачивает массив байтов в буфер. |
Методы, объявленные в классе 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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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
- См. также:
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
© 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.