Spec-Zone.ru › OpenJDK 21

Класс 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)
Создает новый буфер байтов, содержимое которого является общей подпоследовательностью содержимого этого буфера.

Методы, объявленные в классе java.nio.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

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

capacity, hasRemaining, isReadOnly, limit, position, remaining

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

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

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

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
Возвращает:
Новый буфер байтов
См. также:
  • 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
Возвращает:
Новый буфер

duplicate

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

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

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

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

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
Возвращает:
Этот буфер

© 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/MappedByteBuffer.html

Spec-Zone.ru

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