Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/twitter-bootstrap/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java 在RxJava中创建与ConnectableSubject等效的对象_Rx Java - Fatal编程技术网

Rx java 在RxJava中创建与ConnectableSubject等效的对象

Rx java 在RxJava中创建与ConnectableSubject等效的对象,rx-java,Rx Java,我需要在RxJava中创建与ConnectableSubject等效的对象。我想在订阅某个主题之前将事件发布到该主题,并希望订阅方获取所有事件。我不想使用ReplaySubject来缓存这些事件,因为我不想在它们被消耗之后将它们保存在内存中 理想情况下,此代码可以工作,但第一个事件丢失 PublishSubject<String> subject = PublishSubject.create(); ConnectableObservable<String> observ

我需要在RxJava中创建与ConnectableSubject等效的对象。我想在订阅某个主题之前将事件发布到该主题,并希望订阅方获取所有事件。我不想使用ReplaySubject来缓存这些事件,因为我不想在它们被消耗之后将它们保存在内存中

理想情况下,此代码可以工作,但第一个事件丢失

PublishSubject<String> subject = PublishSubject.create();
ConnectableObservable<String> observable = subject.publish();

subject.onNext("1");
observable.subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println("string is " + s);
    }
});
observable.connect();
subject.onNext("2");
subject.onNext("3");
理想情况下应该是这样

string is 1
string is 2
string is 3
PublishSubject
上调用
publish()
在功能上是不可行的。您需要的最接近的东西是内部
BufferUntilSubscriber
它缓冲事件,直到单个
订阅者订阅它。但是,它不支持背压或多个
订阅者
,因此您可能仍然需要使用
publish()
onBackpressureBuffer()

A接近您要查找的内容,但似乎会无限期地为所有未来订阅者(而不是第一个订阅者)缓存输入。不过有一些选项-允许您指定最大缓存大小。
string is 1
string is 2
string is 3