BidirectionalStream

abstract class BidirectionalStream


用于通过 HTTP/2 或 QUIC 连接双向发送和接收数据的类。创建者:Builder

注意:BidirectionalStream 的方法存在排序限制;请参阅各个方法以了解限制说明。

摘要

嵌套类型

BidirectionalStream 的构建器。

用于接收来自 BidirectionalStream 的回调的回调类。

公共构造函数

公共函数

abstract Unit

取消数据流。

abstract Unit

刷新待处理的写入操作。

abstract Boolean

如果流已成功启动且现在已完成(成功、取消或失败),则返回 true

abstract Unit
read(buffer: ByteBuffer!)

从数据流中读取数据到提供的缓冲区中。

abstract Unit

启动流,所有回调都会发送到传递给 BidirectionalStream.Builder 构造函数的 callback 实参。

abstract Unit
write(buffer: ByteBuffer!, endOfStream: Boolean)

添加要写入流的数据。

公共构造函数

BidirectionalStream

BidirectionalStream()

公共函数

取消

abstract fun cancel(): Unit

取消数据流。可以在 start 之后的任何时间调用。取消完成后,系统会调用 onCanceled(),并且不会再调用其他回调方法。如果直播已结束或尚未开始,调用 cancel() 不会产生任何影响,并且不会调用 onCanceled()。如果 BidirectionalStream 构建期间传入的 Executor 在单线程上运行任务,并且在该线程上调用了 cancel(),则在调用 cancel() 后,不会调用任何监听器方法(除了 onCanceled())。否则,在 cancel() 完成后,最多可以调用一个回调方法。

flush

abstract fun flush(): Unit

刷新待处理的写入操作。不应在 onStreamReady() 之前调用此方法。对于之前延迟的 write(),当发送缓冲区时,将调用相应的 onWriteCompleted()

isDone

abstract fun isDone(): Boolean

如果流已成功启动且现在已完成(成功、取消或失败),则返回 true

返回
Boolean

如果流已成功启动并已完成(已完成、已取消或失败),则返回 true;否则返回 false,表示流尚未启动或正在进行中。

读取

abstract fun read(buffer: ByteBuffer!): Unit

从数据流中读取数据到提供的缓冲区中。在响应 CallbackonStreamReady()/ onResponseHeadersReceived() onReadCompleted() 方法的每次调用时,最多只能调用一次。每次调用都会导致调用 Callback onReadCompleted() 方法(如果读取了数据)或 onFailed() 方法(如果出现错误)。系统开始尝试将数据读入 buffer,从 buffer.position() 开始。最多读取 buffer.remaining() 个字节。在调用 onReadCompleted() 时,系统会更新 buffer.position() 以指示读取了多少数据。

参数
buffer: ByteBuffer!

用于将数据读入的 ByteBuffer。必须是直接 ByteBuffer。在调用 onReadCompleted()onCanceled()onFailed() 之前,嵌入器不得读取或修改缓冲区的位置、限制或位置与限制之间的数据。

start

abstract fun start(): Unit

启动流,所有回调都将发送到传递给 BidirectionalStream.Builder 构造函数的 callback 实参。只能调用一次。

write

abstract fun write(buffer: ByteBuffer!, endOfStream: Boolean): Unit

添加要写入流的数据。只有在调用 flush() 之后,系统才会发送数据。每次调用都会导致调用 CallbackonWriteCompleted() 方法(如果发送了数据)或 onFailed() 方法(如果出现错误)。

尝试从 buffer 开始写入数据。buffer.position()系统将写入 buffer.remaining() 字节。只有在写入完整的 ByteBuffer 时,才会调用 onWriteCompleted()

参数
buffer: ByteBuffer!

用于写入数据的 ByteBuffer。必须是直接 ByteBuffer。在调用 onWriteCompleted() onCanceled()onFailed() 之前,嵌入器不得读取或修改缓冲区的位置、限制或位置与限制之间的数据。当 endOfStreamtrue 时,可以为空。

endOfStream: Boolean

如果值为 true,则 buffer 是要写入的最后一个缓冲区,写入后,流会从客户端关闭,从而导致半关闭流或完全关闭流(如果远程端已关闭)。