public interface ScatteringByteChannel extends ReadableByteChannel
散射读取操作在单个调用中将字节序列读入给定的缓冲器序列中的一个或多个。 当实现网络协议或文件格式时,散射读取通常是有用的,例如,将数据分组成由一个或多个固定长度的标题后跟可变长度的主体组成的段。 类似的集会写操作都在定义GatheringByteChannel
接口。
Modifier and Type | Method and Description |
---|---|
long |
read(ByteBuffer[] dsts)
从该通道读取到给定缓冲区的字节序列。
|
long |
read(ByteBuffer[] dsts, int offset, int length)
从该通道读取字节序列到给定缓冲区的子序列中。
|
read
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
- If some other I/O error occurs