- 所有超接口:
-
AutoCloseable
,Channel
,Closeable
,ReadableByteChannel
- 所有已知实现类:
-
DatagramChannel
,FileChannel
,Pipe.SourceChannel
,SocketChannel
可以将字节读入一系列缓冲区的通道。
一个分散读操作在单个调用中将一系列字节读入给定一系列缓冲区中的一个或多个。分散读通常在实现网络协议或文件格式时非常有用,例如,将数据分组为一个或多个固定长度头部后跟可变长度主体的段。类似的聚集写操作在GatheringByteChannel
接口中定义。
- 自 JDK 版本:
- 1.4
-
Method Summary
Modifier and TypeMethodDescriptionlong
read
(ByteBuffer[] dsts) 从此通道读取一系列字节到给定的缓冲区中。long
read
(ByteBuffer[] dsts, int offset, int length) 从此通道读取一系列字节到给定缓冲区的子序列中。Methods declared in interface java.nio.channels.ReadableByteChannel
read
-
Method Details
-
read
从此通道读取一系列字节到给定缓冲区的子序列中。调用此方法会尝试从该通道读取最多 r 字节,其中 r 是指定的缓冲区数组子序列中剩余字节的总数,即
dsts[offset].remaining() + dsts[offset+1].remaining() + ... + dsts[offset+length-1].remaining()
假设读取了长度为 n 的字节序列,其中
0
<=
n<=
r。最多将前dsts[offset].remaining()
字节传输到缓冲区dsts[offset]
,接着将接下来的dsts[offset+1].remaining()
字节传输到缓冲区dsts[offset+1]
,依此类推,直到整个字节序列传输到给定的缓冲区中。尽可能多的字节被传输到每个缓冲区中,因此每个更新后的缓冲区的最终位置,除了最后一个更新的缓冲区外,都保证等于该缓冲区的限制。此方法可以随时调用。但是,如果另一个线程已经启动了对该通道的读操作,则此方法的调用将阻塞,直到第一个操作完成。
- 参数:
-
dsts
- 要传输字节的缓冲区 -
offset
- 要将字节传输到的第一个缓冲区在缓冲区数组中的偏移量;必须是非负数且不大于dsts.length
-
length
- 要访问的最大缓冲区数;必须是非负数且不大于dsts.length
-offset
- 返回:
-
读取的字节数,可能为零,或者如果通道已到达流的末尾,则为
-1
- 抛出:
-
IndexOutOfBoundsException
- 如果offset
和length
参数上的先决条件不成立 -
IllegalArgumentException
- 如果任何缓冲区是只读的 -
NonReadableChannelException
- 如果此通道未打开以进行读取 -
ClosedChannelException
- 如果此通道已关闭 -
AsynchronousCloseException
- 如果另一个线程在读取操作进行中关闭了此通道 -
ClosedByInterruptException
- 如果另一个线程在读取操作进行中中断了当前线程,从而关闭了通道并设置了当前线程的中断状态 -
IOException
- 如果发生其他 I/O 错误
-
read
从此通道读取一系列字节到给定的缓冲区中。形式为
c.read(dsts)
的此方法调用的行为与调用c.read(dsts, 0, dsts.length);
- 参数:
-
dsts
- 要传输字节的缓冲区 - 返回:
-
读取的字节数,可能为零,或者如果通道已到达流的末尾,则为
-1
- 抛出:
-
IllegalArgumentException
- 如果任何缓冲区是只读的 -
NonReadableChannelException
- 如果此通道未打开以进行读取 -
ClosedChannelException
- 如果此通道已关闭 -
AsynchronousCloseException
- 如果另一个线程在读取操作进行中关闭了此通道 -
ClosedByInterruptException
- 如果另一个线程在读取操作进行中中断了当前线程,从而关闭了通道并设置了当前线程的中断状态 -
IOException
- 如果发生其他 I/O 错误
-