Spec-Zone .ru
спецификации, руководства, описания, API
|
public interface ReadableByteChannel extends Channel
Только одна операция чтения на читаемый канал может произойти в любой момент времени. Если один поток будет инициировать операцию чтения на канал тогда какой-либо другой поток, который пытается инициировать другую операцию чтения, то блокирует, пока первая работа не полна. Могут ли другие виды операций ввода-вывода продолжиться одновременно с операцией чтения, зависит от типа канала.
Модификатор и Тип | Метод и Описание |
---|---|
int |
read(ByteBuffer dst)
Читает последовательность байтов от этого канала в данный буфер.
|
int read(ByteBuffer dst) throws IOException
Попытка предпринимается, чтобы читать до r байтов из канала, где r является числом байтов, остающихся в буфере, то есть, dst.remaining(), в настоящее время этот метод вызывается.
Предположите, что последовательность байта длины n читается, где 0 <= n <= r. Эта последовательность байта будет передана в буфер так, чтобы первый байт в последовательности был по индексу p, и последним байтом является по индексу p + n - 1, где p является позицией буфера в настоящее время, этот метод вызывается. По возврату позиция буфера будет равна p + n; его предел не будет изменяться.
Операция чтения не могла бы заполнить буфер, и фактически это не могло бы считать байты вообще. Делает ли это так зависит от природы и состояния канала. Канал сокета в неблокировании режима, например, не может больше читать байты, чем сразу доступны от входного буфера сокета; точно так же канал файла не может больше читать байты, чем остаются в файле. Гарантируется, однако, что, если канал находится в блокировании режима и есть по крайней мере один байт, остающийся в буфере тогда, этот метод блокирует, пока по крайней мере один байт не читается.
В любое время может быть вызван этот метод. Если другой поток уже инициировал операцию чтения на этот канал, однако, то вызов этого метода блокирует, пока первая работа не полна.
dst
- Буфер, в который должны быть переданы байтыNonReadableChannelException
- Если этот канал не был открыт для того, чтобы читатьClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходит
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.