BidirectionalStream

public abstract class BidirectionalStream


這個類別用於透過 HTTP/2 或 QUIC 連線雙向傳送及接收資料。建立者:Builder

注意:BidirectionalStream的方法有排序限制,請參閱個別方法瞭解限制說明。

摘要

巢狀型別

public abstract class BidirectionalStream.Builder

BidirectionalStream 的建構工具。

public abstract class BidirectionalStream.Callback

用於接收 BidirectionalStream 回呼的回呼類別。

公用建構函式

公用方法

abstract void

取消串流。

abstract void

清除待處理的寫入作業。

abstract boolean

如果串流已成功啟動並完成 (成功、取消或失敗),則會傳回 true

abstract void
read(ByteBuffer buffer)

將資料從串流讀取到提供的緩衝區。

abstract void

啟動串流,所有回呼都會傳送至傳遞至 BidirectionalStream.Builder 建構函式的 callback 引數。

abstract void
write(ByteBuffer buffer, boolean endOfStream)

將要寫入串流的資料新增至串流。

公用建構函式

BidirectionalStream

public BidirectionalStream()

公用方法

取消

public abstract void cancel()

取消串流。可在 start 之後隨時呼叫。取消作業完成後,系統會呼叫 onCanceled(),且不會再呼叫其他回呼方法。如果串流已完成或尚未開始,呼叫 cancel() 不會產生任何作用,且不會叫用 onCanceled()。如果在 BidirectionalStream 建構期間傳入的 Executor 在單一執行緒上執行工作,且 cancel() 是在該執行緒上呼叫,則在呼叫 cancel() 後,系統不會叫用任何接聽程式方法 (onCanceled() 除外)。否則,cancel() 完成後最多只能叫用一個回呼方法。

flush

public abstract void flush()

清除待處理的寫入作業。這個方法不應在 onStreamReady() 之前叫用。如果是先前延遲的 write(),系統會在傳送緩衝區時叫用對應的 onWriteCompleted()

isDone

public abstract boolean isDone()

如果串流已成功啟動並完成 (成功、取消或失敗),則會傳回 true

傳回
boolean

如果串流已成功啟動並已完成 (完成、取消或失敗),則傳回 true;否則傳回 false,表示串流尚未啟動或正在進行中。

讀取

public abstract void read(ByteBuffer buffer)

將資料從串流讀取到提供的緩衝區。針對 CallbackonStreamReady()/ onResponseHeadersReceived() onReadCompleted() 方法的每次叫用,最多只能呼叫一次。如果讀取資料,每次呼叫都會導致叫用其中一個 Callback onReadCompleted() 方法;如果發生錯誤,則會叫用 onFailed() 方法。系統會嘗試從 buffer.position() 開始將資料讀取至 buffer。最多讀取 buffer.remaining() 個位元組。呼叫 onReadCompleted() 時,系統會更新 buffer.position(),指出讀取的資料量。

參數
ByteBuffer buffer

ByteBuffer,將資料讀取至 必須是直接 ByteBuffer。在叫用 onReadCompleted()onCanceled()onFailed() 之前,嵌入器不得讀取或修改緩衝區的位置、限制或位置與限制之間的資料。

開始

public abstract void start()

啟動串流,所有回呼都會傳送至傳遞給 BidirectionalStream.Builder 建構函式的 callback 引數。只能呼叫一次。

寫入

public abstract void write(ByteBuffer buffer, boolean endOfStream)

將要寫入串流的資料新增至緩衝區。只有在呼叫 flush() 後,系統才會傳送資料。每次呼叫都會導致系統叫用 CallbackonWriteCompleted() 方法 (如果傳送資料),或 onFailed() 方法 (如果發生錯誤)。

系統開始嘗試從 buffer 寫入資料,起始時間為 buffer.position()。系統將寫入 buffer.remaining() 個位元組。只有在寫入完整的 ByteBuffer 時,才會叫用 onWriteCompleted()

參數
ByteBuffer buffer

要寫入資料的 ByteBuffer。必須是直接 ByteBuffer。在呼叫 onWriteCompleted() onCanceled()onFailed() 之前,嵌入器不得讀取或修改緩衝區的位置、限制或資料 (介於位置和限制之間)。如果 endOfStreamtrue,則可留空。

boolean endOfStream

如果 true,則 buffer 是要寫入的最後一個緩衝區,寫入後,串流會從用戶端關閉,導致半關閉串流,或如果遠端已關閉,則為完全關閉串流。