Spec-Zone.ru › OpenJDK 17

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

Parameters:
file - Путь к файлу для открытия или создания
options - Параметры, определяющие, как открывается файл
executor - Пул потоков или null для связывания канала с предопределённым пулом потоков
attrs - Необязательный список атрибутов файла для атомной установки при создании файла
Returns:
Новый асинхронный файловый канал
Throws:
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, содержащий параметры, заданные в этом методе.

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

Parameters:
file - Путь к файлу для открытия или создания
options - Параметры, определяющие, как открывается файл
Returns:
Новый асинхронный файловый канал
Throws:
IllegalArgumentException - Если множество содержит недопустимое сочетание параметров
UnsupportedOperationException - Если file связан с поставщиком, который не поддерживает создание файловых каналов, или указан неподдерживаемый параметр открытия
FileAlreadyExistsException - Если файл с таким именем уже существует, и указан параметр CREATE_NEW, и файл открывается для записи (необязательная специфическая ошибка)
IOException - Если произошла ошибка ввода-вывода
SecurityException - Если установлен менеджер безопасности, и он отказывается от неопределённого разрешения, необходимого реализации. В случае с поставщиком по умолчанию, вызывается метод SecurityManager.checkRead(String) для проверки доступа на чтение, если файл открывается для чтения. Метод SecurityManager.checkWrite(String) вызывается для проверки доступа на запись, если файл открывается для записи

size

public abstract long size() throws IOException
Возвращает текущий размер файла этого канала.
Returns:
Текущий размер файла этого канала, измеренный в байтах
Throws:
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла другая ошибка ввода-вывода

truncate

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

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

Parameters:
size - Новый размер, неотрицательное количество байт
Returns:
Этот файловый канал
Throws:
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. Если блокировка, которая пересекается с запрашиваемым регионом, уже удерживается этой виртуальной машиной 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, представляющий ожидаемый результат. Метод Future объекта 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. Если он не получает блокировку по какой-либо другой причине, то генерируется соответствующее исключение.

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, 2021, 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/17/docs/api/java.base/java/nio/channels/AsynchronousFileChannel.html

Spec-Zone.ru

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