Spec-Zone.ru › OpenJDK 8

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

Конструкторы

Модификатор Конструктор и описание
protected AsynchronousFileChannel()

Инициализирует новый экземпляр этого класса.

Методы

Модификатор и тип Метод и описание
abstract void force(boolean metaData)

Заставляет любые обновления в файле этого канала записываться на устройство хранения, в котором он находится.

Future<FileLock> lock()

Получает эксклюзивную блокировку файла этого канала.

<A> void lock(A attachment, CompletionHandler<FileLock,? super A> handler)

Получает эксклюзивную блокировку файла этого канала.

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)

Получает блокировку указанной области файла этого канала.

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. Они не подходят для управления доступом к файлу несколькими потоками в рамках одной виртуальной машины.

Type Parameters:
A - Тип вложения
Parameters:
position - Позиция, с которой начинается заблокированная область; должна быть неотрицательной
size - Размер заблокированной области; должен быть неотрицательным, и сумма position + size должна быть неотрицательной
shared - true для запроса общей блокировки, в этом случае этот канал должен быть открыт для чтения (и, возможно, записи); false для запроса исключительной блокировки, в этом случае этот канал должен быть открыт для записи (и, возможно, чтения)
attachment - Объект, который необходимо присоединить к операции ввода-вывода; может быть null
handler - Обработчик для обработки результата
Throws:
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)
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 должна быть неотрицательной
shared - true для запроса общей блокировки, в этом случае этот канал должен быть открыт для чтения (и, возможно, записи); false для запроса исключительной блокировки, в этом случае этот канал должен быть открыт для записи (и, возможно, чтения)
Returns:
объект Future, представляющий ожидаемый результат
Throws:
OverlappingFileLockException - Если блокировка уже удерживается этой виртуальной машиной Java или уже есть попытка заблокировать область
IllegalArgumentException - Если условия на параметрах не выполняются
NonReadableChannelException - Если shared истинно, но этот канал не был открыт для чтения
NonWritableChannelException - Если shared ложно, но этот канал не был открыт для записи

lock

public final Future<FileLock> lock()

Получает эксклюзивную блокировку файла этого канала.

Этот метод инициирует операцию получения эксклюзивной блокировки файла этого канала. Метод возвращает Future, представляющий ожидаемый результат операции. Метод get объекта Future возвращает FileLock при успешном выполнении.

Вызов этого метода ведет себя точно так же, как вызов

ch.lock(0L, Long.MAX_VALUE, false)
Returns:
объект Future, представляющий ожидаемый результат
Throws:
OverlappingFileLockException - Если блокировка уже удерживается этой виртуальной машиной Java или уже есть попытка заблокировать область
NonWritableChannelException - Если этот канал не был открыт для записи

tryLock

public abstract FileLock tryLock(long position,
                                 long size,
                                 boolean shared)
                          throws IOException

Пытается получить блокировку на заданном участке файла этого канала.

Этот метод не блокирует. Вызов всегда возвращает немедленно, либо получив блокировку на запрашиваемой области, либо не сумев это сделать. Если он не смог получить блокировку, потому что другая программа держит перекрывающуюся блокировку, то он возвращает null. Если он не смог получить блокировку по какой-либо другой причине, то генерируется соответствующее исключение.

Parameters:
position - Позиция, с которой начинается заблокированная область; должна быть неотрицательной
size - Размер заблокированной области; должен быть неотрицательным, и сумма position + size должна быть неотрицательной
shared - true для запроса общей блокировки, false для запроса исключительной блокировки
Returns:
Объект блокировки, представляющий вновь полученную блокировку, или null если блокировка не могла быть получена, потому что другая программа держит перекрывающуюся блокировку
Throws:
IllegalArgumentException - Если условия на параметрах не выполняются
ClosedChannelException - Если этот канал закрыт
OverlappingFileLockException - Если блокировка, которая перекрывает запрашиваемую область, уже удерживается этой виртуальной машиной Java или если другой поток уже заблокирован в этом методе и пытается заблокировать перекрывающуюся область того же файла
NonReadableChannelException - Если shared истинно, но этот канал не был открыт для чтения
NonWritableChannelException - Если shared ложно, но этот канал не был открыт для записи
IOException - Если произошла какая-либо другая ошибка ввода-вывода
See Also:
lock(Object,CompletionHandler), lock(long,long,boolean,Object,CompletionHandler), tryLock()

tryLock

public final FileLock tryLock()
                       throws IOException

Пытается получить эксклюзивную блокировку файла этого канала.

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

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

read

public abstract <A> void read(ByteBuffer dst,
                              long position,
                              A attachment,
                              CompletionHandler<Integer,? super A> handler)

Считывает последовательность байтов из этого канала в заданный буфер, начиная с заданной позиции файла.

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

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

Параметры типа:
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, 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.

Spec-Zone.ru

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