Module java.base

Interface ReadableByteChannel

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

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

在可读通道上只能有一个读取操作正在进行。如果一个线程启动了通道上的读取操作,那么任何试图启动另一个读取操作的线程将被阻塞,直到第一个操作完成。其他类型的I/O操作是否可以与读取操作同时进行取决于通道的类型。

自 JDK 1.4 起:
1.4
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    从此通道读取一系列字节到给定的缓冲区中。

    Methods declared in interface java.nio.channels.Channel

    close, isOpen
  • Method Details

    • 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错误