Класс 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, представление файла, предоставленное экземпляром этого класса, гарантированно согласуется с другими представлениями того же файла, предоставленными другими экземплярами в той же программе. Однако представление, предоставляемое экземпляром этого класса, может или не может соответствовать представлениям, наблюдаемым другими одновременно выполняемыми программами, из-за кэширования, выполняемого основной операционной системой, и задержек, вызванных протоколами сетевых файловых систем. Это справедливо независимо от языка, на котором написаны эти другие программы, и независимо от того, работают ли они на том же компьютере или на другом. Точный характер таких несоответствий зависит от системы и поэтому не определен.
- C момента:
- 1.7
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | AsynchronousFileChannel() | Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void | force(boolean metaData) | Заставляет любые обновления файла этого канала быть записанными на устройство хранения. |
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) | Получает блокировку на заданном регионе файла этого канала. |
<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) | Обрезает файл этого канала до заданного размера. |
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, которые устанавливаются атомарно при создании файла.
Новый канал создается путем вызова метода newFileChannel на поставщике, который создал Path.
- Параметры:
-
file- Путь к файлу для открытия или создания -
options- Параметры, определяющие, как открывается файл -
executor- Пул потоков илиnullдля ассоциации канала с пулом потоков по умолчанию -
attrs- Необязательный список атрибутов файла, которые устанавливаются атомарно при создании файла - Возвращает:
- Новый асинхронный канал файла
- Исключения:
-
IllegalArgumentException- Если набор содержит недопустимую комбинацию параметров -
UnsupportedOperationException- Еслиfileсвязан с поставщиком, который не поддерживает создание асинхронных каналов файлов, или указан неподдерживаемый параметр открытия, или массив содержит атрибут, который не может быть установлен атомарно при создании файла -
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связан с поставщиком, который не поддерживает создание каналов файлов, или указан неподдерживаемый параметр открытия -
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 указывает, что необходимо записать обновления как содержимого файла, так и метаданных, что обычно требует как минимум еще одной операции ввода-вывода. Действительно ли этот параметр оказывает какое-либо влияние зависит от операционной системы и поэтому не определено.
Вызов этого метода может вызвать операцию ввода-вывода, даже если канал был открыт только для чтения. Некоторые операционные системы, например, сохраняют время последнего доступа в качестве части метаданных файла, и это время обновляется всякий раз, когда файл читается. Действительно ли это делается зависит от системы и поэтому не определено.
Этот метод гарантирует, что будут принудительно записаны только изменения, которые были внесены в файл этого канала с помощью методов, определенных в этом классе.
- Параметры:
-
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. Если блокировка, которая перекрывает запрашиваемую область, уже удерживается этой виртуальной машиной Java, или этот метод был вызван для блокировки перекрывающейся области, и эта операция еще не завершена, то этот метод генерирует исключение OverlappingFileLockException.
Некоторые операционные системы не поддерживают механизм асинхронного получения блокировки файла. Следовательно, реализация может получать блокировку файла в фоновом потоке или из задачи, выполняемой потоком в связанном пуле потоков. Если имеется много операций блокировки, ожидающих выполнения, то это может потреблять потоки в виртуальной машине Java в течение неопределенного периода времени.
Некоторые операционные системы не поддерживают совместные блокировки, в этом случае запрос на общую блокировку автоматически преобразуется в запрос на эксклюзивную блокировку. Можно ли проверить, является ли недавно полученная блокировка общей или эксклюзивной, вызвав метод isShared объекта полученной блокировки.
Блокировки файлов удерживаются от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками в одной и той же виртуальной машине.
- Тип параметров:
-
A- Тип вложения - Параметры:
-
position- Позиция, с которой начинается заблокированная область; должна быть неотрицательной -
size- Размер заблокированной области; должен быть неотрицательным, а суммаposition+sizeдолжна быть неотрицательной -
shared-trueдля запроса общей блокировки, в этом случае этот канал должен быть открыт для чтения (и, возможно, для записи);falseдля запроса эксклюзивной блокировки, в этом случае этот канал должен быть открыт для записи (и, возможно, для чтения) -
attachment- Объект, прикрепляемый к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Исключения:
-
OverlappingFileLockException- Если блокировка, которая перекрывает запрашиваемую область, уже удерживается этой виртуальной машиной Java, или уже существует попытка заблокировать перекрывающуюся область -
IllegalArgumentException- Если предварительные условия для параметров не выполняются -
NonReadableChannelException- Еслиsharedистинно, но этот канал не был открыт для чтения -
NonWritableChannelException- Еслиsharedложно, но этот канал не был открыт для записи
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должна быть неотрицательной -
shared-trueдля запроса общей блокировки, в этом случае этот канал должен быть открыт для чтения (и, возможно, для записи);falseдля запроса эксклюзивной блокировки, в этом случае этот канал должен быть открыт для записи (и, возможно, для чтения) - Возвращает:
- объект
Future, представляющий ожидаемый результат - Исключения:
-
OverlappingFileLockException- Если блокировка уже удерживается этой виртуальной машиной Java, или уже существует попытка заблокировать область -
IllegalArgumentException- Если предварительные условия для параметров не выполняются -
NonReadableChannelException- Еслиsharedистинно, но этот канал не был открыт для чтения -
NonWritableChannelException- Еслиsharedложно, но этот канал не был открыт для записи
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- Размер заблокированной области; должен быть неотрицательным, а суммаposition+sizeдолжна быть неотрицательной -
shared-trueдля запроса общей блокировки,falseдля запроса эксклюзивной блокировки - Возвращает:
- Объект блокировки, представляющий вновь полученную блокировку, или
nullесли блокировка не могла быть получена, потому что другая программа держит перекрывающуюся блокировку - Исключения:
-
IllegalArgumentException- Если предварительные условия для параметров не выполняются -
ClosedChannelException- Если этот канал закрыт -
OverlappingFileLockException- Если блокировка, которая перекрывает запрашиваемую область, уже удерживается этой виртуальной машиной Java, или если другой поток уже заблокирован в этом методе и пытается заблокировать перекрывающуюся область того же файла -
NonReadableChannelException- Еслиsharedистинно, но этот канал не был открыт для чтения -
NonWritableChannelException- Еслиsharedложно, но этот канал не был открыт для записи -
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ложно, но этот канал не был открыт для записи -
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 , представляющий ожидаемый результат операции. Метод Future get возвращает количество прочитанных байтов или -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 , представляющий ожидаемый результат операции записи. Метод Future get возвращает количество записанных байтов.
Этот метод работает аналогично методу AsynchronousByteChannel.write(ByteBuffer), за исключением того, что байты записываются, начиная с указанной позиции файла. Если заданная позиция больше размера файла в момент попытки записи, то файл будет расширен, чтобы вместить новые байты; значения любых байтов между предыдущим концом файла и вновь записанными байтами не определены.
- Параметры:
-
src- Буфер, из которого будут переноситься байты -
position- Позиция файла, с которой должно начаться перемещение; должна быть неотрицательной - Возвращаемое значение:
- Объект
Future, представляющий ожидаемый результат - Исключения:
-
IllegalArgumentException- Если позиция отрицательная -
NonWritableChannelException- Если этот канал не был открыт для записи
© 1993, 2020, 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/11/docs/api/java.base/java/nio/channels/AsynchronousFileChannel.html