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

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

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

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

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

BidirectionalStream

BidirectionalStream()

ฟังก์ชันสาธารณะ

ยกเลิก

abstract fun cancel(): Unit

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

โอนข้อมูล

abstract fun flush(): Unit

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

isDone

abstract fun isDone(): Boolean

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

แสดงผล
Boolean

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

อ่านแล้ว

abstract fun read(buffer: ByteBuffer!): Unit

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

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

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

เริ่ม

abstract fun start(): Unit

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

เขียน

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

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

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

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

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

endOfStream: Boolean

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