Rx读取文件并将数据发送给12个观察者

时间:2018-06-12 21:26:00

标签: java android rx-java2

解释最后一段代码:

在我使用下面的代码来阅读并发送此日期白色处理程序之前 代码读取二进制文件分配8 * 12 * 1002字节即信号数据(包含  12 * 1002双倍值)

问题:

我如何使用rx_java2来读取此文件和流 循环,同步每1002双同步到12个观察者,每2 ms发布一次延迟的双值

INotifyPropertyChanged

1 个答案:

答案 0 :(得分:0)

您可以尝试通过创建每个concat来进行Observable操作,或者如图所示从Observable.fromIterator()中创建内容。请注意,当您执行此操作以及必须在下游处理错误时,错误处理将变得很棘手。最好使用Flowable,因为如果要在其中一个失败的情况下继续使用下一个数组,则可以使用BackPressureStrategy来定义onErrorResumeNext

public class ReadBinaryDate extends Thread {

    final ArrayList<Observable<double[]>> doubleObservables = new ArrayList<>();

    private Observable<double[]> generateObservable (final double [] array1002) {
        return Observable.interval(2, TimeUnit.MILLISECONDS)
            .flatMap(new Function<Long, ObservableSource<double[]>>() {
                @Override
                public ObservableSource<double[]> apply(Long aLong) throws Exception {
                    return Observable.just(array1002);
                }
            });
    }

    private void generateData() {

        arrayList.clear();
        for (int n = 0; n < 12; n++) {
            double[] yb = new double[1002];
            buf.get(yb, n*1002, (n+1)*1002);
            doubleObservables.add(generateObservable(yb));
        }
    }

    private void subscribeStream() {
        Observable.fromIterable(doubleObservables)
            .subscribe(new Observer<Observable<double[]>>() {
                @Override
                public void onSubscribe(Disposable d) { }

                @Override
                public void onNext(Observable<double[]> observable) {
                    // do on each array
                }

                @Override
                public void onError(Throwable e) {
                    // handle error
                }

                @Override
                public void onComplete() {
                    // do on complete
                }
            });
    }
}