![](/img/trans.png)
[英]How to compare each events in stream, streamController dart
[英]Is StreamController and BehaviorSubject a Stream in Dart?
我使用 StreamBuilder、StreamController、BehaviorSubject、Stream 等已經有一段時間了。 但我仍然對一些定義感到困惑。 尤其是這個問題,StreamController 和 BehaviorSubject 是 Dart 中的 Stream 嗎?
我之所以有這個問題是因為我可以在網上找到以下單詞/語錄:
從在線文檔的上述 4 點來看,它給了我: BehaviorSubject 是一個 Observable,然后是一個 Stream。 所以 BehaviorSubject 是一個流。 並且 BehaviorSubject 也是一個 StreamController。 因此 StreamController 是一個 Stream。
但是如果 StreamController 是一個 Stream,這將與其他一些文章相矛盾,即 Stream 實際上是 StreamController 的一部分,並且您從 StreamController.stream 中獲取 Stream。
如果我們談論 Sink,將會更加混亂。
StreamController 實現了 StreamSink。 所以 Sink 是一個特殊的 StreamController。
因此,從以上所有單詞中,我得到以下結果:
BehaviorSubject = StreamController = Observable = Stream = Sink
最后,一切都是一樣的……我瘋了嗎?
編輯:(我現在明白了。希望它是正確的)
為了澄清我的困惑,我想我必須理解"BehaviorSubject is a special StreamController"
這句話。
通過谷歌搜索和檢查一些 sdk 代碼,我想我明白 BehaviorSubject 是一個特殊的 StreamController,但反之則不然。 這將解決我的困惑。 BehaviorSubject 擴展了 Subject,Subject 實現了 StreamController。 因此"BehaviorSubject is a special StreamController"
是正確的。 但我不能說 StreamController 是一個 BehaviorSubject。 因此,即使 BehaviorSubject 實際上是 Stream,我也不能說 StreamController 是 Stream。
我希望我上面的理解是正確的。
StreamController
是StreamController
。
它不擴展任何東西。 所以它不是Observable
、 Stream
、 BehaviorSubject
或Sink
中的任何一個。
如您所說,它確實實現了Sink
,因此允許您直接在其上添加數據,即使用streamController.add
和streamController.sink.add
。 然后將此數據傳遞到每個控制器攜帶的Stream
上。
BehaviorSubject
實際上並不是標准庫的一部分,只是對來自rxdart
的流的一個花哨的補充。 它允許您隨時直接訪問最新值。
一點也不瘋狂,流就像一個管道,將數據作為接收器接收並作為流返回,而 StreamController 只是用於控制流。 我希望這是有幫助的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.