Spec-Zone.ru › OpenJDK 24

Класс 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 байт.

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

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

Если этот буфер не был сопоставлен в режиме чтения/записи (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 США.
Все права защищены. Использование подчиняется лицензионным условиям и политике перераспределения документации.
ПРОЕКТ 24-ea+36-Debian-1

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/MappedByteBuffer.html

Spec-Zone.ru

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