Spec-Zone.ru › OpenJDK 25

Класс 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

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

capacity, hasRemaining, isReadOnly, limit, position, remaining

Методы, объявленные в классе 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
Возвращает:
Новый буфер байтов
Начиная с версии:
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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/MappedByteBuffer.html

Spec-Zone.ru

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