Spec-Zone.ru › OpenJDK 24

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

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

close

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

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 означает, что необходимо записать обновления и содержимого, и метаданных файла, что обычно требует как минимум одной дополнительной операции ввода-вывода. Действительно ли этот параметр оказывает какое-либо влияние, зависит от базовой операционной системы и поэтому не определено.

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

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

Parameters:
metaData - Если true, то этот метод должен принудительно записать в хранилище изменения и содержимого, и метаданных файла; в противном случае ему необходимо только принудительно записать изменения содержимого.
Throws:
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. Они не подходят для управления доступом к файлу несколькими потоками в одной виртуальной машине.

Type Parameters:
A - Тип привязки
Parameters:
position - Позиция, с которой начинается заблокированный регион; должна быть неотрицательной
size - Размер заблокированного региона; должен быть неотрицательным, и сумма position + size должна быть неотрицательной. Значение нуль означает блокировку всех байтов от указанной начальной позиции до конца файла, независимо от того, будет ли файл впоследствии расширен или укорочен
shared - true для запроса общей блокировки, в таком случае этот канал должен быть открыт для чтения (и, возможно, записи); false для запроса эксклюзивной блокировки, в таком случае этот канал должен быть открыт для записи (и, возможно, чтения)
attachment - Объект, который нужно привязать к операции ввода-вывода; может быть null
handler - Обработчик для обработки результата
Throws:
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)
Type Parameters:
A - Тип привязки
Parameters:
attachment - Объект, который нужно привязать к операции ввода-вывода; может быть null
handler - Обработчик для обработки результата
Throws:
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 при успешном завершении.

Parameters:
position - Позиция, с которой начинается заблокированный регион; должна быть неотрицательной
size - Размер заблокированного региона; должен быть неотрицательным, и сумма position + size должна быть неотрицательной. Значение нуль означает блокировку всех байтов от указанной начальной позиции до конца файла, независимо от того, будет ли файл впоследствии расширен или укорочен
shared - true для запроса общей блокировки, в таком случае этот канал должен быть открыт для чтения (и, возможно, записи); false для запроса эксклюзивной блокировки, в таком случае этот канал должен быть открыт для записи (и, возможно, чтения)
Returns:
объект Future, представляющий ожидаемый результат
Throws:
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)
Returns:
объект Future, представляющий ожидаемый результат
Throws:
OverlappingFileLockException - Если блокировка уже удерживается этой виртуальной машиной Java, или если уже есть попытка заблокировать регион
NonWritableChannelException - Если этот канал не был открыт для записи

tryLock

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

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

Parameters:
position - Позиция, с которой должен начинаться заблокированный участок; должна быть неотрицательной
size - Размер заблокированного участка; должен быть неотрицательным, и сумма position + size должна быть неотрицательной. Значение нуль означает блокировку всех байтов с указанной начальной позиции до конца файла, независимо от того, будет ли файл впоследствии расширен или укорочен
shared - true для запроса совместной блокировки, false для запроса эксклюзивной блокировки
Returns:
Объект блокировки, представляющий вновь полученную блокировку, или null, если блокировка не может быть получена из-за наложения блокировки другим процессом
Throws:
IllegalArgumentException - Если условия на параметрах не соблюдены
ClosedChannelException - Если этот канал закрыт
OverlappingFileLockException - Если блокировка, которая перекрывает запрашиваемый участок, уже получена этой виртуальной машиной Java, или если другая нить уже заблокирована в этом методе и пытается заблокировать перекрывающийся участок того же файла
NonReadableChannelException - Если shared имеет значение true, но этот канал не был открыт для чтения
NonWritableChannelException - Если shared имеет значение false, но этот канал не был открыт для записи
IOException - Если произошла какая-либо другая ошибка ввода-вывода
See Also:
  • 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)
Returns:
Объект блокировки, представляющий вновь полученную блокировку, или null, если блокировка не может быть получена из-за наложения блокировки другим процессом
Throws:
ClosedChannelException - Если этот канал закрыт
OverlappingFileLockException - Если блокировка, которая перекрывает запрашиваемый участок, уже получена этой виртуальной машиной Java, или если другая нить уже заблокирована в этом методе и пытается заблокировать перекрывающийся участок
NonWritableChannelException - Если shared имеет значение false, но этот канал не был открыт для записи
IOException - Если произошла какая-либо другая ошибка ввода-вывода
See Also:
  • 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), за исключением того, что чтение байтов начинается с заданной позиции файла. Если заданная позиция файла больше размера файла в момент попытки чтения, то байты не читаются.

Type Parameters:
A - Тип вложения
Parameters:
dst - Буфер, в который будут передаваться байты
position - Позиция файла, с которой должен начаться обмен; должна быть неотрицательной
attachment - Объект, который необходимо прикрепить к операции ввода-вывода; может быть null
handler - Обработчик для обработки результата
Throws:
IllegalArgumentException - Если позиция отрицательная или буфер только для чтения
NonReadableChannelException - Если этот канал не был открыт для чтения

read

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

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

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

Parameters:
dst - Буфер, в который будут передаваться байты
position - Позиция файла, с которой должен начаться обмен; должна быть неотрицательной
Returns:
Объект Future, представляющий ожидаемый результат
Throws:
IllegalArgumentException - Если позиция отрицательная или буфер только для чтения
NonReadableChannelException - Если этот канал не был открыт для чтения

write

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

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

Type Parameters:
A - Тип вложения
Parameters:
src - Буфер, из которого будут передаваться байты
position - Позиция файла, с которой должна начаться передача; должна быть неотрицательной
attachment - Объект, который необходимо прикрепить к операции ввода-вывода; может быть null
handler - Обработчик для обработки результата
Throws:
IllegalArgumentException - Если позиция отрицательная
NonWritableChannelException - Если этот канал не был открыт для записи

write

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

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

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

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

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

Spec-Zone.ru

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