Интерфейс SeekableByteChannel
- Все суперинтерфейсы:
-
AutoCloseable,ByteChannel,Channel,Closeable,ReadableByteChannel,WritableByteChannel
- Все известные реализующие классы:
FileChannel
public interface SeekableByteChannel extends ByteChannel
Поток байтов с возможностью изменения позиции подключен к сущности, обычно файлу, содержащей последовательность байтов переменной длины, которые можно читать и записывать. Текущая позиция может быть queried и modified. Поток также предоставляет доступ к текущему размеру сущности, к которой подключен поток. Размер увеличивается, когда записываются байты за пределами текущего размера; размер уменьшается при truncated.
Методы position и truncate, которые не возвращают значение, возвращают сам поток, на котором они вызваны. Это позволяет цепочку вызовов методов. Реализации этого интерфейса должны специализировать тип возвращаемого значения, чтобы вызовы методов в классе реализации могли быть объединены в цепочку.
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
long |
position() |
Возвращает позицию текущего потока. |
SeekableByteChannel |
position |
Устанавливает позицию текущего потока. |
int |
read |
Считывает последовательность байтов из этого потока в предоставленный буфер. |
long |
size() |
Возвращает текущий размер сущности, к которой подключен этот поток. |
SeekableByteChannel |
truncate |
Усекает сущность, к которой подключен данный поток, до заданного размера. |
int |
write |
Записывает последовательность байтов в этот поток из предоставленного буфера. |
Подробное описание методов
read
int read(ByteBuffer dst) throws IOException
Байты считываются, начиная с текущей позиции потока, а затем позиция обновляется с количеством фактически прочитанных байтов. В противном случае этот метод ведет себя точно так же, как указано в интерфейсе ReadableByteChannel.
- Определяется:
-
readв интерфейсеReadableByteChannel - Параметры:
-
dst- Буфер, в который должны быть переданы байты - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1если поток достиг конца потока - Исключения:
-
ClosedChannelException- Если этот поток закрыт -
AsynchronousCloseException- Если другой поток закрывает этот поток во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая поток и устанавливая состояние прерывания текущего потока -
IOException- Если возникает другая ошибка ввода-вывода
write
int write(ByteBuffer src) throws IOException
Байты записываются, начиная с текущей позиции потока, если поток не подключен к сущности, такой как файл, который открыт с параметром APPEND, в этом случае позиция сначала перемещается в конец. Сущность, к которой подключен канал, увеличивается при необходимости, чтобы вместить записанные байты, а затем позиция обновляется с количеством фактически записанных байтов. В противном случае этот метод ведет себя точно так же, как определено интерфейсом WritableByteChannel.
- Определяется:
-
writeв интерфейсеWritableByteChannel - Параметры:
-
src- Буфер, из которого должны быть извлечены байты - Возвращает:
- Количество записанных байтов, возможно ноль
- Исключения:
-
ClosedChannelException- Если этот поток закрыт -
AsynchronousCloseException- Если другой поток закрывает этот поток во время выполнения операции записи -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции записи, тем самым закрывая поток и устанавливая состояние прерывания текущего потока -
IOException- Если возникает другая ошибка ввода-вывода
position
long position() throws IOException
- Возвращает:
- Позицию текущего потока, целое неотрицательное число, представляющее количество байтов от начала сущности до текущей позиции
- Исключения:
-
ClosedChannelException- Если этот поток закрыт -
IOException- Если возникает другая ошибка ввода-вывода
position
SeekableByteChannel position(long newPosition) throws IOException
Установка позиции на значение, большее текущего размера, допустима, но не изменяет размер сущности. Позднее попытка прочитать байты в такой позиции сразу вернет указание на конец файла. Позднее попытка записать байты в такую позицию приведет к увеличению сущности для размещения новых байтов; значения любых байтов между предыдущим концом файла и новыми записанными байтами не определены.
Установка позиции потока не рекомендуется при подключении к сущности, обычно файлу, который открыт с параметром APPEND. При открытии для добавления позиция сначала перемещается в конец перед записью.
- Параметры:
-
newPosition- Новая позиция, целое неотрицательное число, представляющее количество байтов от начала сущности - Возвращает:
- Этот поток
- Исключения:
-
ClosedChannelException- Если этот поток закрыт -
IllegalArgumentException- Если новая позиция отрицательная -
IOException- Если возникает другая ошибка ввода-вывода
size
long size() throws IOException
- Возвращает:
- Текущий размер в байтах
- Исключения:
-
ClosedChannelException- Если этот поток закрыт -
IOException- Если возникает другая ошибка ввода-вывода
truncate
SeekableByteChannel truncate(long size) throws IOException
Если заданный размер меньше текущего размера, сущность усекается, отбрасывая любые байты за новым концом. Если заданный размер больше или равен текущему размеру, сущность не изменяется. В любом случае, если текущая позиция больше заданного размера, она устанавливается на этот размер.
Реализация этого интерфейса может запретить усечение при подключении к сущности, обычно файлу, открытому с параметром APPEND.
- Параметры:
-
size- Новый размер, количество байтов - Возвращает:
- Этот поток
- Исключения:
-
NonWritableChannelException- Если этот поток не был открыт для записи -
ClosedChannelException- Если этот поток закрыт -
IllegalArgumentException- Если новый размер отрицательный -
IOException- Если возникает другая ошибка ввода-вывода
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/channels/SeekableByteChannel.html