模块 java.base

接口 AsynchronousByteChannel

所有父级接口:
AsynchronousChannel , AutoCloseable , Channel , Closeable
所有已知的实现类:
AsynchronousSocketChannel

public interface AsynchronousByteChannel extends AsynchronousChannel
可以读写字节的异步通道。

某些通道可能不允许在任何给定时间有多个读取或写入未完成。如果线程在前一个读取操作完成之前调用读取方法,则会抛出 ReadPendingException 。类似地,如果在先前的写入完成之前调用写入方法,则会抛出 WritePendingException 。其他类型的 I/O 操作是否可以与读取操作同时进行取决于通道的类型。

请注意,ByteBuffers 对于多个并发线程的使用是不安全的。当启动读取或写入操作时,必须注意确保在操作完成之前不会访问缓冲区。

自从:
1.7
参见:
  • 方法详情

    • read

      <A> void read(ByteBuffer  dst, A attachment, CompletionHandler <Integer ,? super A> handler)
      从此通道读取一系列字节到给定的缓冲区中。

      此方法启动异步读取操作,以将字节序列从此通道读取到给定缓冲区中。 handler 参数是一个完成处理程序,在读取操作完成(或失败)时调用。传递给完成处理程序的结果是读取的字节数或 -1 如果由于通道已到达流结尾而无法读取任何字节。

      读取操作最多可以读取r来自通道的字节,其中r是缓冲区中剩余的字节数,即尝试读取时的 dst.remaining()。在哪里r为 0,读取操作立即完成,结果为 0,无需启动 I/O 操作。

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

      多个并发线程使用缓冲区是不安全的,因此应注意在操作完成之前不要访问缓冲区。

      可以随时调用此方法。某些通道类型可能不允许在任何给定时间有多个读取未完成。如果线程在前一个读取操作完成之前启动读取操作,则会抛出 ReadPendingException

      类型参数:
      A - 附件类型
      参数:
      dst - 要将字节传输到的缓冲区
      attachment - 附加到 I/O 操作的对象;可以是null
      handler - 完成处理程序
      抛出:
      IllegalArgumentException - 如果缓冲区是只读的
      ReadPendingException - 如果通道不允许超过一个读取未完成且前一个读取尚未完成
      ShutdownChannelGroupException - 如果通道与已终止的 group 关联
    • read

      Future <Integer > read(ByteBuffer  dst)
      从此通道读取一系列字节到给定的缓冲区中。

      此方法启动异步读取操作,以将字节序列从此通道读取到给定缓冲区中。该方法的行为方式与 read(ByteBuffer,Object,CompletionHandler) 方法完全相同,只是该方法不指定完成处理程序,而是返回表示待处理结果的 FutureFutureget 方法返回读取的字节数或 -1 如果因为通道已到达流结尾而无法读取任何字节。

      参数:
      dst - 要将字节传输到的缓冲区
      返回:
      代表操作结果的 Future
      抛出:
      IllegalArgumentException - 如果缓冲区是只读的
      ReadPendingException - 如果通道不允许超过一个读取未完成且前一个读取尚未完成
    • write

      <A> void write(ByteBuffer  src, A attachment, CompletionHandler <Integer ,? super A> handler)
      将给定缓冲区中的字节序列写入此通道。

      此方法启动异步写入操作,以将字节序列从给定缓冲区写入此通道。 handler 参数是一个完成处理程序,在写入操作完成(或失败)时调用。传递给完成处理程序的结果是写入的字节数。

      写操作最多可以写r字节到通道,其中r是缓冲区中剩余的字节数,即尝试写入时的 src.remaining()。在哪里r为 0,写入操作立即完成,结果为 0,无需启动 I/O 操作。

      假设一个字节序列的长度n被写入,其中 0 <n <=  r.该字节序列将从索引开始的缓冲区传输p, 在哪里p是执行写入时缓冲区的位置;写入的最后一个字节的索引将是p +  n- 1 。完成后缓冲区的位置将等于p +  n;它的限制不会改变。

      多个并发线程使用缓冲区是不安全的,因此应注意在操作完成之前不要访问缓冲区。

      可以随时调用此方法。某些通道类型可能不允许在任何给定时间有多个未完成的写入。如果线程在前一个写操作完成之前启动写操作,则将抛出 WritePendingException

      类型参数:
      A - 附件类型
      参数:
      src - 要从中检索字节的缓冲区
      attachment - 附加到 I/O 操作的对象;可以是null
      handler - 完成处理程序对象
      抛出:
      WritePendingException - 如果通道不允许超过一个写入未完成且前一个写入尚未完成
      ShutdownChannelGroupException - 如果通道与已终止的 group 关联
    • write

      Future <Integer > write(ByteBuffer  src)
      将给定缓冲区中的字节序列写入此通道。

      此方法启动异步写入操作,以将字节序列从给定缓冲区写入此通道。该方法的行为方式与 write(ByteBuffer,Object,CompletionHandler) 方法完全相同,只是该方法不指定完成处理程序,而是返回一个 Future 表示未决结果。 Futureget 方法返回写入的字节数。

      参数:
      src - 要从中检索字节的缓冲区
      返回:
      代表操作结果的 Future
      抛出:
      WritePendingException - 如果通道不允许超过一个写入未完成且前一个写入尚未完成