Класс 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
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
force |
Принудительно записывает все изменения файла этого канала на устройство хранения, на котором он находится. |
final Future |
lock() |
Получает исключительную блокировку файла этого канала. |
abstract Future |
lock |
Получает блокировку указанной области файла этого канала. |
abstract <A> void |
lock |
Получает блокировку указанной области файла этого канала. |
final <A> void |
lock |
Получает исключительную блокировку файла этого канала. |
static AsynchronousFileChannel |
open |
Открывает или создает файл для чтения и/или записи и возвращает асинхронный файловый канал для доступа к нему. |
static AsynchronousFileChannel |
open |
Открывает или создает файл для чтения и/или записи и возвращает асинхронный файловый канал для доступа к нему. |
abstract Future |
read |
Читает последовательность байтов из этого канала в указанный буфер, начиная с заданной позиции в файле. |
abstract <A> void |
read |
Читает последовательность байтов из этого канала в указанный буфер, начиная с заданной позиции в файле. |
abstract long |
size() |
Возвращает текущий размер файла этого канала. |
abstract AsynchronousFileChannel |
truncate |
Усекает файл этого канала до указанного размера. |
final FileLock |
tryLock() |
Пытается получить исключительную блокировку файла этого канала. |
abstract FileLock |
tryLock |
Пытается получить блокировку указанной области файла этого канала. |
abstract Future |
write |
Записывает последовательность байтов в этот канал из указанного буфера, начиная с заданной позиции в файле. |
abstract <A> void |
write |
Записывает последовательность байтов в этот канал из указанного буфера, начиная с заданной позиции в файле. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе AsynchronousChannel
close
Подробное описание конструкторов
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должна быть неотрицательной. Значение 0 означает блокировку всех байтов от указанной начальной позиции до конца файла независимо от того, будет ли файл впоследствии увеличен или усечен -
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должна быть неотрицательной. Значение 0 означает блокировку всех байтов от указанной начальной позиции до конца файла независимо от того, будет ли файл впоследствии увеличен или усечен -
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должна быть неотрицательной. Значение 0 означает блокировку всех байтов от указанной начальной позиции до конца файла независимо от того, будет ли файл впоследствии увеличен или усечен -
shared-trueдля запроса общей блокировки,falseдля запроса исключительной блокировки - Возвращает:
- Объект блокировки, представляющий только что полученную блокировку, или
null, если блокировку не удалось получить, поскольку другая программа удерживает пересекающуюся блокировку - Исключения:
-
IllegalArgumentException- Если не выполнены предварительные условия для параметров -
ClosedChannelException- Если этот канал закрыт -
OverlappingFileLockException- Если виртуальная машина Java уже удерживает блокировку, пересекающуюся с запрошенной областью, или другой поток уже ожидает выполнения этого метода и пытается заблокировать пересекающуюся область того же файла -
NonReadableChannelException- Еслиsharedравно true, но этот канал открыт не для чтения -
NonWritableChannelException- Еслиsharedравно false, но этот канал открыт не для записи -
IOException- Если возникает другая ошибка ввода-вывода - См. также:
tryLock
public final FileLock tryLock() throws IOException
Вызов этого метода в форме ch.tryLock() действует точно так же, как вызов
ch.tryLock(0L, Long.MAX_VALUE, false)
- Возвращает:
- Объект блокировки, представляющий только что полученную блокировку, или
null, если блокировку не удалось получить, поскольку другая программа удерживает пересекающуюся блокировку - Исключения:
-
ClosedChannelException- Если этот канал закрыт -
OverlappingFileLockException- Если виртуальная машина Java уже удерживает блокировку, пересекающуюся с запрошенной областью, или другой поток уже ожидает выполнения этого метода и пытается заблокировать пересекающуюся область -
NonWritableChannelException- Еслиsharedравно false, но этот канал открыт не для записи -
IOException- Если возникает другая ошибка ввода-вывода - См. также:
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- Если позиция отрицательна или буфер доступен только для чтения -
NonReadableChannelException- Если этот канал открыт не для чтения
read
public abstract Future<Integer> read(ByteBuffer dst, long position)
Этот метод инициирует считывание последовательности байтов из этого канала в указанный буфер, начиная с указанной позиции в файле. Метод возвращает Future, представляющий ожидающий результат операции. Метод get объекта Future возвращает количество считанных байтов или -1, если указанная позиция больше или равна размеру файла на момент попытки чтения.
Этот метод работает так же, как метод AsynchronousByteChannel.read(ByteBuffer), за исключением того, что байты считываются, начиная с указанной позиции в файле. Если указанная позиция в файле больше размера файла на момент попытки чтения, байты не считываются.
- Параметры:
-
dst- Буфер, в который должны быть переданы байты -
position- Позиция в файле, с которой начинается передача; должна быть неотрицательной - Возвращает:
- Объект
Future, представляющий ожидающий результат - Исключения:
-
IllegalArgumentException- Если позиция отрицательна или буфер доступен только для чтения -
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- Если позиция отрицательна -
NonWritableChannelException- Если этот канал открыт не для записи
write
public abstract Future<Integer> write(ByteBuffer src, long position)
Этот метод начинает запись последовательности байтов из указанного буфера в этот канал, начиная с указанной позиции в файле. Метод возвращает Future, представляющий ожидающий результат операции записи. Метод get объекта Future возвращает количество записанных байтов.
Этот метод работает так же, как метод AsynchronousByteChannel.write(ByteBuffer), за исключением того, что байты записываются, начиная с указанной позиции в файле. Если в момент попытки записи указанная позиция превышает размер файла, размер файла будет увеличен для размещения новых байтов; значения любых байтов между прежним концом файла и вновь записанными байтами не определены.
- Параметры:
-
src— буфер, из которого должны передаваться байты -
position— позиция в файле, с которой должна начаться передача; должна быть неотрицательной - Возвращает:
- Объект
Future, представляющий ожидающий результат - Исключения:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/AsynchronousFileChannel.html