Интерфейс SeekableByteChannel
- Все суперинтерфейсы:
AutoCloseable, ByteChannel, Channel, Closeable, ReadableByteChannel, WritableByteChannel
- Все известные классы-реализации:
FileChannel
public interface SeekableByteChannel extends ByteChannel
Байтовый канал с поддержкой позиционирования подключён к сущности, обычно к файлу, содержащему последовательность байтов переменной длины, которую можно читать и записывать. Текущую позицию можно queried и modified. Канал также предоставляет доступ к текущему размеру подключённой к нему сущности. Размер увеличивается при записи байтов за его текущей границей и уменьшается, когда сущность truncated.
Методы position и truncate, которые иначе не возвращали бы значение, определены так, чтобы возвращать канал, для которого они вызываются. Это позволяет объединять вызовы методов в цепочку. Реализациям этого интерфейса следует специализировать тип возвращаемого значения, чтобы вызовы методов класса-реализации можно было объединять в цепочку.
- С версии:
- 1.7
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
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— если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
NonReadableChannelException— если этот канал открыт не для чтения -
IOException— если возникает другая ошибка ввода-вывода
write
int write(ByteBuffer src) throws IOException
Запись байтов начинается с текущей позиции этого канала, если только канал не подключён к сущности, например к файлу, открытому с параметром APPEND; в этом случае позиция сначала перемещается в конец. При необходимости размер сущности, к которой подключён канал, увеличивается, чтобы вместить записанные байты, после чего позиция обновляется с учётом фактически записанного количества байтов. В остальном этот метод ведёт себя точно так, как описано в интерфейсе WritableByteChannel.
- Определено в:
-
writeв интерфейсеWritableByteChannel - Параметры:
-
src— буфер, из которого будут извлечены байты - Возвращает:
- Количество записанных байтов, возможно, ноль
- Выбрасывает:
-
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции записи -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
NonWritableChannelException— если этот канал открыт не для записи -
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, 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/SeekableByteChannel.html