Spec-Zone.ru › OpenJDK 21

Класс AsynchronousFileChannel

java.lang.Object
java.nio.channels.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

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

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 - Если произошла ошибка ввода-вывода
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 - Если возникла другая ошибка ввода/вывода
См. также:
  • lock(Object,CompletionHandler)
  • lock(long,long,boolean,Object,CompletionHandler)
  • tryLock()

tryLock

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

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

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

read

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

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

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

Тип параметров:
A - Тип присоединённого объекта
Параметры:
dst - Буфер, в который будут переданы байты
position - Позиция файла, с которой должен начаться процесс передачи; должна быть неотрицательной
attachment - Объект, который присоединяется к операции ввода/вывода; может быть null
handler - Обработчик для обработки результата
Исключения:
IllegalArgumentException - Если позиция отрицательная или буфер только для чтения
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

Spec-Zone.ru

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