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

เริ่มสตรีม การเรียกกลับทั้งหมดจะไปที่อาร์กิวเมนต์ callback ที่ส่งไปยังเครื่องมือสร้างของ BidirectionalStream.Builder

abstract void
write(ByteBuffer buffer, boolean endOfStream)

เพิ่มข้อมูลที่จะเขียนลงในสตรีม

เครื่องมือสร้างสาธารณะ

BidirectionalStream

public BidirectionalStream()

เมธอดสาธารณะ

ยกเลิก

public abstract void cancel()

ยกเลิกสตรีม เรียกได้ทุกเมื่อหลังจาก start onCanceled() จะถูกเรียกใช้เมื่อการยกเลิกเสร็จสมบูรณ์ และจะไม่เรียกใช้เมธอดการเรียกกลับอื่นๆ อีก หากสตรีมเสร็จสมบูรณ์แล้วหรือยังไม่ได้เริ่ม การเรียก cancel() จะไม่มีผล และระบบจะไม่เรียกใช้ onCanceled() หาก Executor ที่ส่งผ่านระหว่างการสร้าง BidirectionalStream เรียกใช้ฟังก์ชันในเธรดเดียว และมีการเรียก cancel() ในเธรดนั้น ระบบจะไม่เรียกใช้เมธอด Listener (นอกเหนือจาก onCanceled()) หลังจากเรียก cancel() มิฉะนั้น ระบบอาจเรียกใช้เมธอด Callback อย่างน้อย 1 รายการหลังจาก cancel() เสร็จสมบูรณ์

โอนข้อมูล

public abstract void flush()

ล้างการเขียนที่รอดำเนินการ ไม่ควรเรียกใช้เมธอดนี้ก่อน onStreamReady() สำหรับ write() ที่ล่าช้าก่อนหน้านี้ ระบบจะเรียกใช้ onWriteCompleted() ที่เกี่ยวข้องเมื่อส่งบัฟเฟอร์

isDone

public abstract boolean isDone()

แสดงผล true หากเริ่มสตรีมสำเร็จและตอนนี้เสร็จสมบูรณ์แล้ว (สำเร็จ ยกเลิก หรือล้มเหลว)

แสดงผล
boolean

true หากเริ่มสตรีมสำเร็จและตอนนี้เสร็จสมบูรณ์แล้ว (เสร็จสมบูรณ์ ยกเลิก หรือล้มเหลว) มิฉะนั้นจะแสดงผล false เพื่อระบุว่ายังไม่ได้เริ่มสตรีมหรือกำลังดำเนินการอยู่

อ่านแล้ว

public abstract void read(ByteBuffer buffer)

อ่านข้อมูลจากสตรีมลงในบัฟเฟอร์ที่ระบุ เรียกได้ไม่เกิน 1 ครั้งเพื่อตอบสนองต่อการเรียกใช้เมธอด onStreamReady()/ onResponseHeadersReceived() และ onReadCompleted() ของ Callback แต่ละครั้ง การเรียกแต่ละครั้งจะส่งผลให้มีการเรียกใช้เมธอด Callback ของ onReadCompleted() หากมีการอ่านข้อมูล หรือเมธอด onFailed() หากมีข้อผิดพลาด ระบบจะเริ่มพยายามอ่านข้อมูลลงใน buffer โดยเริ่มจาก buffer.position() อ่านได้ไม่เกิน buffer.remaining() ไบต์ ระบบจะอัปเดต buffer.position() เมื่อมีการเรียกใช้ onReadCompleted() เพื่อระบุจำนวนข้อมูลที่อ่าน

พารามิเตอร์
ByteBuffer buffer

ByteBuffer ที่จะอ่านข้อมูล ต้องเป็น ByteBuffer โดยตรง ผู้ฝังต้องไม่อ่านหรือแก้ไขตำแหน่ง ขีดจำกัด หรือข้อมูลของบัฟเฟอร์ระหว่างตำแหน่งและขีดจำกัดจนกว่าจะมีการเรียกใช้ onReadCompleted(), onCanceled() หรือ onFailed()

เริ่ม

public abstract void start()

เริ่มสตรีม การเรียกกลับทั้งหมดจะไปที่อาร์กิวเมนต์ callback ที่ส่งไปยังเครื่องมือสร้างของ BidirectionalStream.Builder ควรเรียกเพียงครั้งเดียว

เขียน

public abstract void write(ByteBuffer buffer, boolean endOfStream)

เพิ่มข้อมูลที่จะเขียนลงในสตรีม ระบบจะส่งข้อมูลหลังจากเรียกใช้ flush() เท่านั้น การเรียกแต่ละครั้งจะส่งผลให้มีการเรียกใช้เมธอด Callback ของ onWriteCompleted() หากมีการส่งข้อมูล หรือเมธอด onFailed() หากมีข้อผิดพลาด

ระบบจะเริ่มพยายามเขียนข้อมูลจาก buffer โดยเริ่มจาก buffer.position() ระบบจะเขียน buffer.remaining() ไบต์ ระบบจะเรียกใช้ onWriteCompleted() เมื่อเขียน ByteBuffer ทั้งหมดแล้วเท่านั้น

พารามิเตอร์
ByteBuffer buffer

ByteBuffer ที่จะเขียนข้อมูล ต้องเป็น ByteBuffer โดยตรง ผู้ฝังต้องไม่อ่านหรือแก้ไขตำแหน่ง ขีดจำกัด หรือข้อมูลของบัฟเฟอร์ระหว่างตำแหน่งและขีดจำกัดจนกว่าจะมีการเรียกใช้ onWriteCompleted(), onCanceled() หรือ onFailed() อาจว่างเปล่าเมื่อ endOfStream เป็น true

boolean endOfStream

หากเป็น true แสดงว่า buffer เป็นบัฟเฟอร์สุดท้ายที่จะเขียน และเมื่อเขียนแล้ว ระบบจะปิดสตรีมจากฝั่งไคลเอ็นต์ ซึ่งส่งผลให้สตรีมปิดครึ่งหนึ่งหรือปิดทั้งหมดหากฝั่งระยะไกลปิดไปแล้ว