Spec-Zone.ru › OpenJDK 25

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

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

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

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

close

Методы, объявленные в интерфейсе 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 могут быть указаны следующие параметры:

additional options
Параметр Описание
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 - Если возникает другая ошибка ввода-вывода
См. также:
  • 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 — если этот канал не был открыт для записи

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая общие сведения по темам, определения терминов, способы обхода проблем и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

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