Класс AsynchronousFileChannel
- Все реализуемые интерфейсы:
-
Closeable,AutoCloseable,AsynchronousChannel,Channel
public abstract class AsynchronousFileChannel extends Object implements AsynchronousChannel
Асинхронный файловый канал создается при открытии файла с помощью одного из методов open этого класса. Файл содержит последовательность байтов переменной длины, которую можно читать и записывать, и размер которой можно получить с помощью queried. Размер файла увеличивается при записи байтов за пределы текущего размера; размер файла уменьшается при truncated.
У асинхронного файлового канала нет текущей позиции в файле. Вместо этого позиция файла задаётся для каждого метода чтения и записи, который инициирует асинхронные операции. В качестве параметра указывается обработчик завершения (completion handler) CompletionHandler, который вызывается для обработки результата операции ввода-вывода. Этот класс также определяет методы чтения и записи, которые инициируют асинхронные операции, возвращая Future для представления ожидаемого результата операции. Future может быть использован для проверки завершения операции, ожидания её завершения и получения результата.
Кроме операций чтения и записи, этот класс определяет следующие операции:
Обновления, внесённые в файл, могут быть
forced outна подлежащий устройству хранения, гарантируя, что данные не потеряются в случае сбоя системы.Область файла может быть
lockedот доступа другими программами.
Асинхронный канал ассоциируется с пулом потоков, в который передаются задачи для обработки событий ввода-вывода и отправки обработчикам завершения, обрабатывающим результаты операций ввода-вывода канала. Обработчик завершения операции ввода-вывода, начатой на канале, гарантированно вызывается одним из потоков в пуле потоков (Это гарантирует, что обработчик завершения выполняется потоком с ожидаемой идентичностью). Когда операция ввода-вывода завершается немедленно, и инициирующий поток сам является потоком в пуле, тогда обработчик завершения может быть вызван непосредственно инициирующим потоком. Когда асинхронный канал создаётся без указания пула потоков, тогда канал ассоциируется с зависящим от системы по умолчанию пулом потоков, который может быть общим с другими каналами. Пул потоков по умолчанию настраивается системными свойствами, определёнными классом 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 |
Записывает последовательность байтов в этот канал из заданного буфера, начиная с заданной позиции в файле. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, унаследованные от интерфейса java.nio.channels.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- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности, и он запретил неопределённое разрешение, необходимое реализации. В случае стандартного поставщика, вызывается методSecurityManager.checkRead(String)для проверки доступа на чтение, если файл открывается для чтения. Вызывается методSecurityManager.checkWrite(String)для проверки доступа на запись, если файл открывается для записи
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- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности, и он запретил неопределённое разрешение, необходимое реализации. В случае стандартного поставщика, вызывается методSecurityManager.checkRead(String)для проверки доступа на чтение, если файл открывается для чтения. Вызывается методSecurityManager.checkWrite(String)для проверки доступа на запись, если файл открывается для записи
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должна быть неотрицательной. Значение 0 означает блокировку всех байтов от указанной начальной позиции до конца файла, независимо от того, будет ли файл впоследствии расширен или усечен -
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должна быть неотрицательной. Значение 0 означает блокировку всех байтов от указанной начальной позиции до конца файла, независимо от того, будет ли файл впоследствии расширен или усечен -
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.
- Параметры:
-
position- Позиция, с которой должен начинаться заблокированный участок; должна быть неотрицательной -
size- Размер заблокированного участка; должен быть неотрицательным, и суммаposition+sizeдолжна быть неотрицательной. Значение нуль означает блокировку всех байтов с указанной начальной позиции до конца файла, независимо от того, будет ли файл впоследствии расширен или усечен -
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, 2023, 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/21/docs/api/java.base/java/nio/channels/AsynchronousFileChannel.html