Spec-Zone.ru › OpenJDK 27

Класс AsynchronousFileChannel

java.lang.Object
java.nio.channels.AsynchronousFileChannel
Все реализуемые интерфейсы:
Closeable, AutoCloseable, AsynchronousChannel, Channel
public abstract class AsynchronousFileChannel extends Object implements AsynchronousChannel
Асинхронный канал для чтения, записи и обработки файлов.

Асинхронный файловый канал создаётся при открытии файла вызовом одного из методов open, определённых этим классом. Файл содержит последовательность байтов переменной длины, которую можно читать и записывать и текущий размер которой можно queried. Размер файла увеличивается при записи байтов за пределами его текущего размера; размер файла уменьшается при его truncated.

Асинхронный файловый канал не имеет текущей позиции в файле. Вместо этого позиция в файле указывается в каждом методе чтения и записи, инициирующем асинхронную операцию. В качестве параметра указывается CompletionHandler, который вызывается для обработки результата операции ввода-вывода. Этот класс также определяет методы чтения и записи, инициирующие асинхронные операции и возвращающие Future, представляющий ожидаемый результат операции. Future можно использовать, чтобы проверить, завершилась ли операция, дождаться её завершения и получить результат.

Помимо операций чтения и записи, этот класс определяет следующие операции:

  • Изменения, внесённые в файл, можно forced out на устройство хранения, чтобы гарантировать сохранность данных в случае сбоя системы.

  • Область файла можно locked от доступа других программ.

С AsynchronousFileChannel связана группа потоков, которым отправляются задачи для обработки событий ввода-вывода и вызова обработчиков завершения, обрабатывающих результаты операций ввода-вывода в канале. Гарантируется, что обработчик завершения операции ввода-вывода, инициированной в канале, будет вызван одним из потоков группы (это гарантирует, что обработчик завершения будет выполняться потоком с ожидаемой идентичностью). Если операция ввода-вывода завершается немедленно, а инициирующий её поток входит в группу потоков, обработчик завершения может быть вызван непосредственно инициирующим потоком. Если AsynchronousFileChannel создан без указания группы потоков, канал связывается с зависящей от системы группой потоков по умолчанию, которая может использоваться совместно с другими каналами. Группа потоков по умолчанию настраивается системными свойствами, определёнными классом AsynchronousChannelGroup.

Каналы этого типа безопасны для использования несколькими параллельными потоками. Метод close можно вызвать в любое время, как указано в интерфейсе Channel. В результате все незавершённые асинхронные операции в канале завершаются с исключением AsynchronousCloseException. Одновременно может выполняться несколько операций чтения и записи. Если одновременно выполняется несколько операций чтения и записи, порядок операций ввода-вывода и вызова обработчиков завершения не определён; в частности, не гарантируется выполнение операций в порядке их инициирования. Объекты ByteBuffers, используемые при чтении или записи, небезопасны для одновременного использования несколькими операциями ввода-вывода. Кроме того, после инициирования операции ввода-вывода следует позаботиться о том, чтобы не обращаться к буферу до завершения операции.

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

С версии:
1.7

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

AsynchronousFileChannel()
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

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

Модификатор и тип Метод Описание
abstract void force(boolean metaData)
Записывает все изменения файла этого канала на устройство хранения, на котором он находится.
final Future<FileLock> lock()
Получает исключительную блокировку файла этого канала.
abstract Future<FileLock> lock(long position, long size, boolean shared)
Получает блокировку указанной области файла этого канала.
abstract <A> void lock(long position, long size, boolean shared, A attachment, CompletionHandler<FileLock, ? super A> handler)
Получает блокировку указанной области файла этого канала.
final <A> void lock(A attachment, CompletionHandler<FileLock, ? super A> handler)
Получает исключительную блокировку файла этого канала.
static AsynchronousFileChannel open(Path file, OpenOption... options)
Открывает или создаёт файл для чтения и/или записи, возвращая асинхронный файловый канал для доступа к файлу.
static AsynchronousFileChannel open(Path file, Set<? extends OpenOption> options, ExecutorService executor, FileAttribute<?>... attrs)
Открывает или создаёт файл для чтения и/или записи, возвращая асинхронный файловый канал для доступа к файлу.
abstract Future<Integer> read(ByteBuffer dst, long position)
Читает последовательность байтов из этого канала в указанный буфер, начиная с заданной позиции в файле.
abstract <A> void read(ByteBuffer dst, long position, A attachment, CompletionHandler<Integer, ? super A> handler)
Читает последовательность байтов из этого канала в указанный буфер, начиная с заданной позиции в файле.
abstract long size()
Возвращает текущий размер файла этого канала.
abstract AsynchronousFileChannel truncate(long size)
Обрезает файл этого канала до указанного размера.
final FileLock tryLock()
Пытается получить исключительную блокировку файла этого канала.
abstract FileLock tryLock(long position, long size, boolean shared)
Пытается получить блокировку указанной области файла этого канала.
abstract Future<Integer> write(ByteBuffer src, long position)
Записывает последовательность байтов из указанного буфера в этот канал, начиная с заданной позиции в файле.
abstract <A> void write(ByteBuffer src, long position, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов из указанного буфера в этот канал, начиная с заданной позиции в файле.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и может быть удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Приостанавливает текущий поток до его пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Приостанавливает текущий поток до его пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Приостанавливает текущий поток до его пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.

Методы, объявленные в интерфейсе AsynchronousChannel

close
Модификатор и тип Метод Описание
void close()
Закрывает этот канал.

Методы, объявленные в интерфейсе Channel

isOpen
Модификатор и тип Метод Описание
boolean isOpen()
Сообщает, открыт ли этот канал.

Подробное описание конструкторов

AsynchronousFileChannel

protected AsynchronousFileChannel()
Инициализирует новый экземпляр этого класса.

Подробное описание методов

open

public static AsynchronousFileChannel open(Path file, Set<? extends OpenOption> options, ExecutorService executor, FileAttribute<?>... attrs) throws IOException
Открывает или создает файл для чтения и/или записи и возвращает асинхронный файловый канал для доступа к файлу.

Параметр options определяет способ открытия файла. Параметры READ и WRITE определяют, следует ли открыть файл для чтения и/или записи. Если в массиве нет ни одного из этих параметров, существующий файл открывается для чтения.

Помимо READ и WRITE, могут быть указаны следующие параметры:

дополнительные параметры
Параметр Описание
TRUNCATE_EXISTING При открытии существующего файла его размер сначала усекается до 0 байт. Этот параметр игнорируется, если файл открыт только для чтения.
CREATE_NEW Если этот параметр указан, создается новый файл; операция завершается неудачей, если файл уже существует. При создании файла проверка его существования и создание файла, если он не существует, выполняются атомарно относительно других операций файловой системы. Этот параметр игнорируется, если файл открыт только для чтения.
CREATE Если этот параметр указан, существующий файл открывается, а если он не существует — создается новый. При создании файла проверка его существования и создание файла, если он не существует, выполняются атомарно относительно других операций файловой системы. Этот параметр игнорируется, если также указан параметр CREATE_NEW или файл открыт только для чтения.
DELETE_ON_CLOSE Если этот параметр указан, реализация приложит все усилия, чтобы удалить файл при его закрытии методом close. Если метод close не вызывается, предпринимается попытка приложить все усилия для удаления файла при завершении работы виртуальной машины Java.
SPARSE При создании нового файла этот параметр служит подсказкой о том, что файл будет разреженным. Если новый файл не создается, этот параметр игнорируется.
SYNC Требует синхронной записи каждого изменения содержимого или метаданных файла на базовое устройство хранения. (см. Целостность файлов при синхронном вводе-выводе).
DSYNC Требует синхронной записи каждого изменения содержимого файла на базовое устройство хранения. (см. Целостность файлов при синхронном вводе-выводе).

Реализация может также поддерживать дополнительные параметры.

Параметр executor — это ExecutorService, которому передаются задачи для обработки событий ввода-вывода и передачи результатов выполнения операций, инициированных для полученного канала. Характер этих задач в значительной степени зависит от реализации, поэтому при настройке Executor следует проявлять осторожность. Как минимум он должен поддерживать неограниченную очередь задач и не должен выполнять задачи в потоке, вызывающем метод execute. Завершение работы службы-исполнителя, пока канал открыт, приводит к неопределенному поведению.

Параметр attrs — это необязательный массив файловых file-attributes, которые атомарно устанавливаются при создании файла.

Новый канал создается вызовом метода newAsynchronousFileChannel у провайдера, создавшего Path.

Параметры:
file — путь к файлу, который нужно открыть или создать
options — параметры, определяющие способ открытия файла
executor — пул потоков или null для привязки канала к пулу потоков по умолчанию
attrs — необязательный список файловых атрибутов, которые атомарно устанавливаются при создании файла
Возвращает:
новый асинхронный файловый канал
Исключения:
IllegalArgumentException — если набор содержит недопустимую комбинацию параметров
UnsupportedOperationException — если file связан с провайдером, не поддерживающим создание асинхронных файловых каналов, указан неподдерживаемый параметр открытия или массив содержит атрибут, который нельзя атомарно установить при создании файла
FileAlreadyExistsException — если файл с таким именем уже существует, указан параметр CREATE_NEW и файл открывается для записи (необязательное специфическое исключение)
IOException — если возникает другая ошибка ввода-вывода

open

public static AsynchronousFileChannel open(Path file, OpenOption... options) throws IOException
Открывает или создает файл для чтения и/или записи и возвращает асинхронный файловый канал для доступа к файлу.

Вызов этого метода ведет себя точно так же, как вызов

    ch.open(file, opts, null, new FileAttribute<?>[0]);
где opts — это Set, содержащий параметры, указанные для этого метода.

Полученный канал связан с пулом потоков по умолчанию, которому передаются задачи для обработки событий ввода-вывода и передачи результатов обработчикам завершения, обрабатывающим результаты асинхронных операций, выполненных для полученного канала.

Параметры:
file — путь к файлу, который нужно открыть или создать
options — параметры, определяющие способ открытия файла
Возвращает:
новый асинхронный файловый канал
Исключения:
IllegalArgumentException — если набор содержит недопустимую комбинацию параметров
UnsupportedOperationException — если file связан с провайдером, не поддерживающим создание файловых каналов, или указан неподдерживаемый параметр открытия
FileAlreadyExistsException — если файл с таким именем уже существует, указан параметр CREATE_NEW и файл открывается для записи (необязательное специфическое исключение)
IOException — если возникает ошибка ввода-вывода

size

public abstract long size() throws IOException
Возвращает текущий размер файла этого канала.
Возвращает:
текущий размер файла этого канала в байтах
Исключения:
ClosedChannelException — если этот канал закрыт
IOException — если возникает другая ошибка ввода-вывода

truncate

public abstract AsynchronousFileChannel truncate(long size) throws IOException
Усекает файл этого канала до заданного размера.

Если заданный размер меньше текущего размера файла, файл усекается, а все байты за новым концом файла отбрасываются. Если заданный размер больше или равен текущему размеру файла, файл не изменяется.

Параметры:
size — новый размер, неотрицательное количество байтов
Возвращает:
этот файловый канал
Исключения:
NonWritableChannelException — если этот канал не был открыт для записи
ClosedChannelException — если этот канал закрыт
IllegalArgumentException — если новый размер отрицателен
IOException — если возникает другая ошибка ввода-вывода

force

public abstract void force(boolean metaData) throws IOException
Принудительно записывает все изменения файла этого канала на устройство хранения, на котором он находится.

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

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

Параметр metaData можно использовать, чтобы ограничить количество операций ввода-вывода, которые должен выполнять этот метод. Значение false для этого параметра указывает, что на устройство хранения необходимо записать только изменения содержимого файла; значение true указывает, что необходимо записать изменения и содержимого файла, и его метаданных, для чего обычно требуется как минимум еще одна операция ввода-вывода. Фактическое влияние этого параметра зависит от базовой операционной системы и поэтому не определено.

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

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

Параметры:
metaData — если true, этот метод должен принудительно записать на устройство хранения изменения и содержимого файла, и его метаданных; в противном случае достаточно принудительно записать только изменения содержимого
Исключения:
ClosedChannelException — если этот канал закрыт
IOException — если возникает другая ошибка ввода-вывода

lock

public abstract <A> void lock(long position, long size, boolean shared, A attachment, CompletionHandler<FileLock, ? super A> handler)
Получает блокировку для указанной области файла этого канала.

Этот метод инициирует операцию получения блокировки для указанной области файла этого канала. Параметр handler — это обработчик завершения, вызываемый при получении блокировки (или сбое операции). Результат, передаваемый обработчику завершения, — полученная FileLock.

Область, заданная параметрами position и size, не обязана находиться внутри фактического файла или даже пересекаться с ним. Размер областей блокировки фиксирован; если заблокированная область изначально включает конец файла, а размер файла превышает границы области, новая часть файла не будет защищена блокировкой. Если ожидается увеличение размера файла и требуется заблокировать весь файл, следует заблокировать область, начинающуюся с нуля и не меньшую ожидаемого максимального размера файла. Двухаргументный метод lock(Object,CompletionHandler) просто блокирует область размером Long.MAX_VALUE. Если position неотрицательно, а size равно нулю, возвращается блокировка размером Long.MAX_VALUE - position. Если виртуальная машина Java уже удерживает блокировку, перекрывающую запрошенную область, или этот метод вызван для блокировки перекрывающейся области и операция еще не завершена, метод выбрасывает OverlappingFileLockException.

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

Некоторые операционные системы не поддерживают совместные блокировки; в этом случае запрос совместной блокировки автоматически преобразуется в запрос исключительной блокировки. Проверить, является ли полученная блокировка совместной или исключительной, можно вызовом метода isShared у объекта блокировки.

Файловые блокировки удерживаются от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу нескольких потоков внутри одной виртуальной машины.

Параметры типа:
A — тип присоединяемого объекта
Параметры:
position — позиция начала блокируемой области; должна быть неотрицательной
size — размер блокируемой области; должен быть неотрицательным, а сумма position + size должна быть неотрицательной. Значение ноль означает блокировку всех байтов от указанной начальной позиции до конца файла независимо от того, будет ли файл впоследствии увеличен или усечен
shared — true для запроса совместной блокировки; в этом случае канал должен быть открыт для чтения (и, возможно, для записи); false для запроса исключительной блокировки; в этом случае канал должен быть открыт для записи (и, возможно, для чтения)
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Исключения:
OverlappingFileLockException — если виртуальная машина Java уже удерживает блокировку, перекрывающую запрошенную область, или уже выполняется попытка заблокировать перекрывающуюся область
IllegalArgumentException — если не соблюдены предварительные условия для параметров
NonReadableChannelException — если shared равно true, но канал не был открыт для чтения
NonWritableChannelException — если shared равно false, но канал не был открыт для записи

lock

public final <A> void lock(A attachment, CompletionHandler<FileLock, ? super A> handler)
Получает исключительную блокировку файла этого канала.

Этот метод инициирует операцию получения блокировки для указанной области файла этого канала. Параметр handler — это обработчик завершения, вызываемый при получении блокировки (или сбое операции). Результат, передаваемый обработчику завершения, — полученная FileLock.

Вызов этого метода вида ch.lock(att,handler) ведет себя точно так же, как вызов

    ch.lock(0L, Long.MAX_VALUE, false, att, handler)
Параметры типа:
A — тип присоединяемого объекта
Параметры:
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Исключения:
OverlappingFileLockException — если виртуальная машина Java уже удерживает блокировку или уже выполняется попытка заблокировать область
NonWritableChannelException — если канал не был открыт для записи

lock

public abstract Future<FileLock> lock(long position, long size, boolean shared)
Получает блокировку для указанной области файла этого канала.

Этот метод инициирует операцию получения блокировки для указанной области файла этого канала. Метод ведет себя точно так же, как метод lock(long, long, boolean, Object, CompletionHandler), за исключением того, что вместо указания обработчика завершения он возвращает Future, представляющий ожидающий результат. Метод get объекта Future при успешном завершении возвращает FileLock.

Параметры:
position — позиция начала блокируемой области; должна быть неотрицательной
size — размер блокируемой области; должен быть неотрицательным, а сумма position + size должна быть неотрицательной. Значение ноль означает блокировку всех байтов от указанной начальной позиции до конца файла независимо от того, будет ли файл впоследствии увеличен или усечен
shared — true для запроса совместной блокировки; в этом случае канал должен быть открыт для чтения (и, возможно, для записи); false для запроса исключительной блокировки; в этом случае канал должен быть открыт для записи (и, возможно, для чтения)
Возвращает:
объект Future, представляющий ожидающий результат
Исключения:
OverlappingFileLockException — если виртуальная машина Java уже удерживает блокировку или уже выполняется попытка заблокировать область
IllegalArgumentException — если не соблюдены предварительные условия для параметров
NonReadableChannelException — если shared равно true, но канал не был открыт для чтения
NonWritableChannelException — если shared равно false, но канал не был открыт для записи

lock

public final Future<FileLock> lock()
Получает исключительную блокировку файла этого канала.

Этот метод инициирует операцию получения исключительной блокировки файла этого канала. Метод возвращает Future, представляющий ожидающий результат операции. Метод get объекта Future при успешном завершении возвращает FileLock.

Вызов этого метода ведет себя точно так же, как вызов

    ch.lock(0L, Long.MAX_VALUE, false)
Возвращает:
объект Future, представляющий ожидающий результат
Исключения:
OverlappingFileLockException — если виртуальная машина Java уже удерживает блокировку или уже выполняется попытка заблокировать область
NonWritableChannelException — если канал не был открыт для записи

tryLock

public abstract FileLock tryLock(long position, long size, boolean shared) throws IOException
Пытается получить блокировку для указанной области файла этого канала.

Этот метод не блокирует выполнение. Вызов всегда немедленно возвращает управление: либо блокировка запрошенной области получена, либо получить ее не удалось. Если получить блокировку не удалось из-за блокировки перекрывающейся области другой программой, возвращается null. Если получить блокировку не удалось по любой другой причине, выбрасывается соответствующее исключение. Если position неотрицательно, а size равно нулю, возвращается блокировка размером Long.MAX_VALUE - position.

Параметры:
position — позиция начала блокируемой области; должна быть неотрицательной
size — размер блокируемой области; должен быть неотрицательным, а сумма position + size должна быть неотрицательной. Значение ноль означает блокировку всех байтов от указанной начальной позиции до конца файла независимо от того, будет ли файл впоследствии увеличен или усечен
shared — true для запроса совместной блокировки, false для запроса исключительной блокировки
Возвращает:
объект блокировки, представляющий только что полученную блокировку, или null, если получить блокировку не удалось, поскольку другая программа удерживает блокировку перекрывающейся области
Исключения:
IllegalArgumentException — если не соблюдены предварительные условия для параметров
ClosedChannelException — если этот канал закрыт
OverlappingFileLockException — если виртуальная машина Java уже удерживает блокировку, перекрывающую запрошенную область, или другой поток уже заблокирован в этом методе и пытается заблокировать перекрывающуюся область того же файла
NonReadableChannelException — если shared равно true, но канал не был открыт для чтения
NonWritableChannelException — если shared равно false, но канал не был открыт для записи
IOException — если возникает другая ошибка ввода-вывода
См. также:
  • lock(Object,CompletionHandler)
  • lock(long,long,boolean,Object,CompletionHandler)
  • tryLock()

tryLock

public final FileLock tryLock() throws IOException
Пытается получить исключительную блокировку файла этого канала.

Вызов этого метода вида ch.tryLock() ведет себя точно так же, как вызов

    ch.tryLock(0L, Long.MAX_VALUE, false)
Возвращает:
объект блокировки, представляющий только что полученную блокировку, или null, если получить блокировку не удалось, поскольку другая программа удерживает блокировку перекрывающейся области
Исключения:
ClosedChannelException — если этот канал закрыт
OverlappingFileLockException — если виртуальная машина Java уже удерживает блокировку, перекрывающую запрошенную область, или другой поток уже заблокирован в этом методе и пытается заблокировать перекрывающуюся область
NonWritableChannelException — если shared равно false, но канал не был открыт для записи
IOException — если возникает другая ошибка ввода-вывода
См. также:
  • lock(Object,CompletionHandler)
  • lock(long,long,boolean,Object,CompletionHandler)
  • tryLock(long,long,boolean)

read

public abstract <A> void read(ByteBuffer dst, long position, A attachment, CompletionHandler<Integer, ? super A> handler)
Считывает последовательность байтов из этого канала в указанный буфер, начиная с заданной позиции файла.

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

Этот метод работает так же, как метод AsynchronousByteChannel.read(ByteBuffer,Object,CompletionHandler), за исключением того, что байты считываются начиная с заданной позиции файла. Если на момент выполнения попытки чтения заданная позиция файла больше размера файла, байты не считываются.

Параметры типа:
A — тип присоединяемого объекта
Параметры:
dst — буфер, в который будут переданы байты
position — позиция файла, с которой начинается передача; должна быть неотрицательной
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Исключения:
IllegalArgumentException — если позиция отрицательна, буфер доступен только для чтения или является представлением MemorySegment, выделенного в арене с привязкой к потоку
NonReadableChannelException — если этот канал не был открыт для чтения

read

public abstract Future<Integer> read(ByteBuffer dst, long position)
Считывает последовательность байтов из этого канала в указанный буфер, начиная с заданной позиции файла.

Этот метод инициирует чтение последовательности байтов из этого канала в указанный буфер, начиная с заданной позиции файла. Метод возвращает Future, представляющий ожидающий результат операции. Метод get объекта Future возвращает количество прочитанных байтов или -1, если указанная позиция больше или равна размеру файла на момент выполнения попытки чтения.

Этот метод работает так же, как метод AsynchronousByteChannel.read(ByteBuffer), за исключением того, что байты считываются начиная с заданной позиции файла. Если на момент выполнения попытки чтения заданная позиция файла больше размера файла, байты не считываются.

Параметры:
dst — буфер, в который будут переданы байты
position — позиция файла, с которой начинается передача; должна быть неотрицательной
Возвращает:
объект Future, представляющий ожидающий результат
Исключения:
IllegalArgumentException — если позиция отрицательна, буфер доступен только для чтения или является представлением MemorySegment, выделенного в арене с привязкой к потоку
NonReadableChannelException — если этот канал не был открыт для чтения

write

public abstract <A> void write(ByteBuffer src, long position, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов из указанного буфера в этот канал, начиная с заданной позиции файла.

Этот метод работает так же, как метод AsynchronousByteChannel.write(ByteBuffer,Object,CompletionHandler), за исключением того, что байты записываются начиная с заданной позиции файла. Если на момент выполнения попытки записи указанная позиция больше размера файла, размер файла увеличивается, чтобы вместить новые байты; значения байтов между прежним концом файла и новыми записанными байтами не определены.

Параметры типа:
A — тип присоединяемого объекта
Параметры:
src — буфер, из которого будут переданы байты
position — позиция файла, с которой начинается передача; должна быть неотрицательной
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Исключения:
IllegalArgumentException — если позиция отрицательна или буфер является представлением MemorySegment, выделенного в арене с привязкой к потоку
NonWritableChannelException — если этот канал не был открыт для записи

write

public abstract Future<Integer> write(ByteBuffer src, long position)
Записывает последовательность байтов в этот канал из указанного буфера, начиная с указанной позиции в файле.

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

Этот метод работает так же, как метод AsynchronousByteChannel.write(ByteBuffer), за исключением того, что байты записываются начиная с указанной позиции в файле. Если в момент выполнения записи указанная позиция больше размера файла, размер файла будет увеличен, чтобы вместить новые байты; значения байтов между прежним концом файла и вновь записанными байтами не определены.

Параметры:
src — Буфер, из которого будут передаваться байты
position — Позиция в файле, с которой начинается передача; должна быть неотрицательной
Возвращает:
Объект Future, представляющий ожидающий результат
Исключения:
IllegalArgumentException — Если позиция отрицательна или буфер является представлением MemorySegment, выделенного в арене с привязкой к потоку
NonWritableChannelException — Если этот канал не был открыт для записи

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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