public interface ScatteringByteChannel
可将字节读入缓冲区序列的通道。
分散 读取操作可在单个调用中将一个字节序列读入一个或多个给定的缓冲区序列。分散读取通常在实现网络协议或文件格式时很有用,例如将数据分组放入段中(这些段由一个或多个长度固定的头,后跟长度可变的正文组成)。在 GatheringByteChannel
接口中定义了类似的集中 写入操作。
方法摘要 | |
---|---|
long |
read(ByteBuffer[] dsts) 将字节序列从此通道读入给定的缓冲区。 |
long |
read(ByteBuffer[] dsts, int offset, int length) 将字节序列从此通道读入给定缓冲区的子序列中。 |
从接口 java.nio.channels.ReadableByteChannel 继承的方法 |
---|
read |
从接口 java.nio.channels.Channel 继承的方法 |
---|
close, isOpen |
方法详细信息 |
---|
long read(ByteBuffer[] dsts, int offset, int length) throws IOException
调用此方法会尝试最多从此通道读取 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
IndexOutOfBoundsException
- 如果关于
offset 和
length 参数的前提不成立
NonReadableChannelException
- 如果不允许从此通道进行读取操作
ClosedChannelException
- 如果此通道已关闭
AsynchronousCloseException
- 如果正在进行读取操作时另一个线程关闭了此通道
ClosedByInterruptException
- 如果正在进行读取操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程设置为中断状态
IOException
- 如果发生其他 I/O 错误
long read(ByteBuffer[] dsts) throws IOException
调用此方法的形式为 c.read(dsts),该调用与以下调用完全相同:
c.read(dsts, 0,dsts.length);
dsts
- 要向其中传输字节的缓冲区
NonReadableChannelException
- 如果不允许从此通道进行读取操作
ClosedChannelException
- 如果此通道已关闭
AsynchronousCloseException
- 如果正在进行读取操作时另一个线程关闭了此通道
ClosedByInterruptException
- 如果正在进行读取操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程设置为中断状态
IOException
- 如果发生其他 I/O 错误