Spec-Zone.ru › OpenJDK 17

Класс MappedByteBuffer

java.lang.Object
java.nio.Buffer
java.nio.ByteBuffer
java.nio.MappedByteBuffer
Все реализованные интерфейсы:
Comparable<ByteBuffer>
public abstract 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 байт.

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

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

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

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

position

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

limit

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

mark

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

reset

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

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

Переопределяет:
reset в классе Buffer
Возвращает:
Этот буфер

clear

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

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

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

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

Переопределяет:
clear в классе Buffer
Возвращает:
Этот буфер

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

rewind

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

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

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

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, 2021, 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/17/docs/api/java.base/java/nio/MappedByteBuffer.html

Spec-Zone.ru

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