模块  java.base
软件包  java.nio.channels

Interface AsynchronousByteChannel

    • 方法详细信息

      • 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 + Ñ - 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)方法完全相同,只是该方法返回表示挂起结果的Future ,而不是指定完成处理程序。 Futureget方法返回读取的字节数,如果由于通道已到达流末尾而无法读取字节,则返回-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 - 如果通道不允许多个写入未完成且前一次写入尚未完成