جریان دو طرفه

public abstract class BidirectionalStream


کلاسی برای ارسال و دریافت دوطرفه داده‌ها از طریق اتصالات HTTP/2 یا QUIC. ایجاد شده توسط Builder .

نکته: محدودیت‌هایی در ترتیب متدهای BidirectionalStream وجود دارد؛ لطفاً برای شرح محدودیت‌ها به متدهای جداگانه مراجعه کنید.

خلاصه

انواع تو در تو

public abstract class BidirectionalStream.Builder

سازنده برای BidirectionalStream s.

public abstract class BidirectionalStream.Callback

کلاس Callback برای دریافت Callbackها از یک BidirectionalStream استفاده می‌شود.

سازندگان عمومی

روش‌های عمومی

abstract void
cancel ()

استریم را لغو می‌کند.

abstract void
flush ()

فلاش‌ها در انتظار نوشتن هستند.

abstract boolean
isDone ()

اگر استریم با موفقیت شروع شده باشد و اکنون تمام شده باشد (موفق، لغو شده یا ناموفق) true را برمی‌گرداند.

abstract void
read ( ByteBuffer buffer)

داده‌ها را از جریان داده (stream) می‌خواند و در بافر ارائه شده قرار می‌دهد.

abstract void
start ()

جریان را شروع می‌کند، تمام فراخوانی‌های برگشتی به آرگومان callback ارسال شده به سازنده‌ی BidirectionalStream.Builder می‌روند.

abstract void
write ( ByteBuffer buffer, boolean endOfStream)

داده‌هایی را که باید به جریان نوشته شوند، اضافه می‌کند.

سازندگان عمومی

جریان دو طرفه

public BidirectionalStream()

روش‌های عمومی

لغو

public abstract void cancel()

جریان را لغو می‌کند. می‌توان آن را در هر زمانی پس از start فراخوانی کرد. onCanceled() پس از اتمام لغو فراخوانی می‌شود و هیچ متد فراخوانی مجدد دیگری فراخوانی نخواهد شد. اگر جریان تکمیل شده باشد یا شروع نشده باشد، فراخوانی cancel() هیچ تاثیری ندارد و onCanceled() فراخوانی نخواهد شد. اگر Executor که در طول ساخت BidirectionalStream ارسال شده است، وظایف را روی یک نخ واحد اجرا کند و cancel() روی آن نخ فراخوانی شود، هیچ متد شنونده‌ای (به جز onCanceled() ) پس از فراخوانی cancel() فراخوانی نخواهد شد. در غیر این صورت، حداکثر یک متد فراخوانی مجدد می‌تواند پس از تکمیل cancel() فراخوانی شود.

فلاشینگ

public abstract void flush()

تخلیه در انتظار نوشتن. این متد نباید قبل از onStreamReady() فراخوانی شود. برای write() های با تأخیر قبلی، onWriteCompleted() مربوطه هنگام ارسال بافر فراخوانی خواهد شد.

انجام شد

public abstract boolean isDone()

اگر استریم با موفقیت شروع شده باشد و اکنون تمام شده باشد (موفق، لغو شده یا ناموفق) true را برمی‌گرداند.

بازگشت‌ها
boolean

اگر جریان با موفقیت شروع شده و اکنون تمام شده است (تکمیل شده، لغو شده یا شکست خورده)، true برمی‌گرداند، در غیر این صورت false را برمی‌گرداند تا نشان دهد که جریان هنوز شروع نشده یا در حال انجام است.

خواندن

public abstract void read(ByteBuffer buffer)

داده‌ها را از جریان داده (stream) به داخل بافر ارائه شده می‌خواند. حداکثر یک بار در پاسخ به هر فراخوانی متدهای onStreamReady() / onResponseHeadersReceived() و onReadCompleted() از Callback می‌توان آن را فراخوانی کرد. هر فراخوانی منجر به فراخوانی یکی از متدهای onReadCompleted() در Callback در صورت خوانده شدن داده‌ها و یا فراخوانی متد onFailed() در صورت وجود خطا می‌شود. تلاشی برای خواندن داده‌ها به داخل buffer از buffer.position() آغاز می‌شود. حداکثر بایت‌های buffer.remaining() خوانده می‌شوند. buffer.position() پس از فراخوانی onReadCompleted() به‌روزرسانی می‌شود تا نشان دهد چه مقدار داده خوانده شده است.

پارامترها
ByteBuffer buffer

ByteBuffer که قرار است داده‌ها در آن خوانده شوند. باید یک بایت‌بافر مستقیم باشد. جاسازی‌کننده نباید موقعیت، محدودیت یا داده‌های بافر بین موقعیت و محدودیت آن را بخواند یا تغییر دهد تا زمانی که onReadCompleted() ، onCanceled() یا onFailed() فراخوانی شوند.

شروع

public abstract void start()

جریان را شروع می‌کند، تمام فراخوانی‌های برگشتی به آرگومان callback ارسال شده به سازنده‌ی BidirectionalStream.Builder می‌روند. فقط باید یک بار فراخوانی شود.

بنویس

public abstract void write(ByteBuffer buffer, boolean endOfStream)

داده‌هایی را که باید به جریان نوشته شوند، اضافه می‌کند. داده‌ها فقط پس از فراخوانی flush() ارسال می‌شوند. هر فراخوانی منجر به فراخوانی یکی از متدهای onWriteCompleted() در Callback در صورت ارسال داده و یا فراخوانی متد onFailed() در صورت وجود خطا می‌شود.

تلاشی برای نوشتن داده از buffer با شروع از buffer.position() آغاز می‌شود. buffer.remaining() بایت‌ها نوشته خواهند شد. onWriteCompleted() فقط زمانی فراخوانی می‌شود که ByteBuffer کامل نوشته شود.

پارامترها
ByteBuffer buffer

ByteBuffer برای نوشتن داده‌ها. باید یک ByteBuffer مستقیم باشد. جاسازی‌کننده نباید موقعیت، محدودیت یا داده‌های بین موقعیت و محدودیت بافر را بخواند یا تغییر دهد تا زمانی که onWriteCompleted() ، onCanceled() یا onFailed() فراخوانی شوند. وقتی endOfStream برابر با true باشد، می‌تواند خالی باشد.

boolean endOfStream

اگر true ، buffer آخرین بافری است که نوشته می‌شود و پس از نوشته شدن، جریان از سمت کلاینت بسته می‌شود و در نتیجه، جریان نیمه‌بسته یا اگر سمت ریموت قبلاً بسته شده باشد، جریان کاملاً بسته خواهد شد.