模块 java.base

接口 ScatteringByteChannel

所有父级接口:
AutoCloseable , Channel , Closeable , ReadableByteChannel
所有已知的实现类:
DatagramChannel , FileChannel , Pipe.SourceChannel , SocketChannel

public interface ScatteringByteChannel extends ReadableByteChannel
可以将字节读入缓冲区序列的通道。

A 散射读取操作在一次调用中将字节序列读取到一个或多个给定缓冲区序列中。分散读取在实现网络协议或文件格式时通常很有用,例如,将数据分组为由一个或多个固定长度的标头和后跟可变长度的主体组成的段。相似的搜集写操作在GatheringByteChannel 接口中定义。

自从:
1.4
  • 方法总结

    修饰符和类型
    方法
    描述
    long
    read(ByteBuffer[] dsts)
    从此通道读取一系列字节到给定的缓冲区中。
    long
    read(ByteBuffer[] dsts, int offset, int length)
    从此通道读取字节序列到给定缓冲区的子序列中。

    在接口 java.nio.channels.Channel 中声明的方法

    close, isOpen

    在接口 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 - 如果 offsetlength 参数的先决条件不成立
      IllegalArgumentException - 如果任何缓冲区是只读的
      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
      抛出:
      IllegalArgumentException - 如果任何缓冲区是只读的
      NonReadableChannelException - 如果这个通道没有打开阅读
      ClosedChannelException - 如果此通道关闭
      AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
      ClosedByInterruptException - 如果另一个线程在读取操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
      IOException - 如果发生其他 I/O 错误