-
- All Superinterfaces:
-
AutoCloseable
,Channel
,Closeable
,ReadableByteChannel
- 所有已知实现类:
-
DatagramChannel
,FileChannel
,Pipe.SourceChannel
,SocketChannel
public interface ScatteringByteChannelextends ReadableByteChannel
一个可以将字节读入缓冲区序列的通道。散射读取操作在单个调用中将字节序列读取到给定缓冲器序列中的一个或多个中。 在实现网络协议或文件格式时,散射读取通常很有用,例如,将数据分组为由一个或多个固定长度标头后跟可变长度主体组成的段。 类似的收集写操作在
GatheringByteChannel
接口中定义。- 从以下版本开始:
- 1.4
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 long
read(ByteBuffer[] dsts)
从该通道读取一系列字节到给定的缓冲区。long
read(ByteBuffer[] dsts, int offset, int length)
从该通道读取一系列字节到给定缓冲区的子序列。-
声明方法的接口 java.nio.channels.ReadableByteChannel
read
-
-
-
-
方法详细信息
-
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
- 结果
- 如果通道已到达流末尾,则读取的字节数(可能为零)或
-1
- 异常
-
IndexOutOfBoundsException
- 如果offset
和length
参数的前提条件不成立 -
NonReadableChannelException
- 如果未打开此频道进行阅读 -
ClosedChannelException
- 如果此频道已关闭 -
AsynchronousCloseException
- 如果另一个线程在读取操作正在进行时关闭此通道 -
ClosedByInterruptException
- 如果另一个线程在读操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态 -
IOException
- 如果发生其他一些I / O错误
-
read
long read(ByteBuffer[] dsts) throws IOException
从该通道读取一系列字节到给定的缓冲区。调用
c.read(dsts)
形式的此方法的行为与调用的方式完全相同c.read(dsts, 0, dsts.length);
- 参数
-
dsts
- 要传输字节的缓冲区 - 结果
- 如果通道已到达流末尾,则读取的字节数(可能为零)或
-1
- 异常
-
NonReadableChannelException
- 如果未打开此频道进行阅读 -
ClosedChannelException
- 如果此渠道已关闭 -
AsynchronousCloseException
- 如果另一个线程在读取操作正在进行时关闭此通道 -
ClosedByInterruptException
- 如果另一个线程在读操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态 -
IOException
- If some other I/O error occurs
-
-