模块 java.base

接口 ReadableByteChannel

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

public interface ReadableByteChannel extends Channel
可以读取字节的通道。

在任何给定时间,在可读通道上只能进行一次读取操作。如果一个线程在通道上启动读取操作,则任何其他尝试启动另一个读取操作的线程都将阻塞,直到第一个操作完成。其他类型的 I/O 操作是否可以与读取操作同时进行取决于通道的类型。

自从:
1.4
  • 方法总结

    修饰符和类型
    方法
    描述
    int
    从此通道读取一系列字节到给定的缓冲区中。

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

    close, isOpen
  • 方法详情

    • read

      int read(ByteBuffer  dst) throws IOException
      从此通道读取一系列字节到给定的缓冲区中。

      尝试读取最多r来自通道的字节,其中r是调用此方法时缓冲区中剩余的字节数,即 dst.remaining()

      假设一个字节序列的长度n被读取,其中 0 <=n <=  r.该字节序列将被传输到缓冲区中,以便序列中的第一个字节位于索引处p最后一个字节在索引处p +  n- 1 ,其中p是调用此方法时缓冲区的位置。返回时缓冲区的位置将等于p +  n;它的限制不会改变。

      读取操作可能不会填满缓冲区,实际上它可能根本不会读取任何字节。它是否这样做取决于通道的性质和状态。例如,非阻塞模式下的套接字通道不能读取比套接字输入缓冲区立即可用的字节更多的字节;同样,文件通道读取的字节数不能超过文件中保留的字节数。但是,可以保证,如果通道处于阻塞模式并且缓冲区中至少有一个字节剩余,则此方法将阻塞直到至少读取一个字节。

      可以随时调用此方法。但是,如果另一个线程已经在此通道上发起读取操作,则此方法的调用将阻塞,直到第一个操作完成。

      参数:
      dst - 要将字节传输到的缓冲区
      返回:
      读取的字节数,可能为零,如果通道已到达流末尾,则为 -1
      抛出:
      IllegalArgumentException - 如果缓冲区是只读的
      NonReadableChannelException - 如果这个通道没有打开阅读
      ClosedChannelException - 如果此通道关闭
      AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
      ClosedByInterruptException - 如果另一个线程在读取操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
      IOException - 如果发生其他 I/O 错误