- 所有父级接口:
AutoCloseable,Channel,Closeable,ReadableByteChannel
- 所有已知的实现类:
DatagramChannel,FileChannel,Pipe.SourceChannel,SocketChannel
可以将字节读入缓冲区序列的通道。
A 散射读取操作在一次调用中将字节序列读取到一个或多个给定缓冲区序列中。分散读取在实现网络协议或文件格式时通常很有用,例如,将数据分组为由一个或多个固定长度的标头和后跟可变长度的主体组成的段。相似的搜集写操作在GatheringByteChannel 接口中定义。
- 自从:
- 1.4
-
方法总结
修饰符和类型方法描述longread(ByteBuffer[] dsts) 从此通道读取一系列字节到给定的缓冲区中。longread(ByteBuffer[] dsts, int offset, int length) 从此通道读取字节序列到给定缓冲区的子序列中。在接口 java.nio.channels.ReadableByteChannel 中声明的方法
read
-
方法详情
-
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.lengthlength- 要访问的最大缓冲区数;必须为非负且不大于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 错误
-