java - 将 RxJava Emissions 写入文本文件的有效方法?

标签 java reactive-programming rx-java

Observable<T>最有效的方法是什么?将项目放入文本文件中,其中为每次发射写入一行?我正在使用 try-with-resources下面设置 CountDownLatch ,但由于阻塞,它绝对感觉像是一种反模式。中断和提前取消订阅也很有可能引发错误。

 private void saveToCSV(String url) {

        CountDownLatch latch = new CountDownLatch(1);

        File outputFile = new File(url);

        try(BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {

            writer.write(ReportItem.getHeaders() + "\r\n");

            reportItems.forDate(dt)
                    .map(ReportItem::toCSVLine).map(s -> s.concat("\r\n"))
                    .subscribe(Checked.a1(writer::write), Throwable::printStackTrace, latch::countDown);

            latch.await(); 

        } catch (Exception e) {
            e.printStackTrace();
        }
}

最佳答案

再三考虑之后,Observable.using() 或许不是这里的最佳候选者。我会简单地尝试这样的事情(用 finallyDo() 代替):

private void saveToCSV(String url) {
    BufferedWriter writer = getBufferedWriter(url);
    writer.write(ReportItem.getHeaders() + "\r\n");
    reportItems.forDate(dt)
               .map(ReportItem::toCSVLine).map(s -> s.concat("\r\n"))
               .finallyDo(() -> close(writer))
               .subscribe(Checked.a1(writer::write), Throwable::printStackTrace);
}

private void close(BufferedWriter writer) {
    try {
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private BufferedWriter getBufferedWriter(String url) {
    try {
        File outputFile = new File(url);
        return new BufferedWriter(new FileWriter(outputFile));
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

关于java - 将 RxJava Emissions 写入文本文件的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426103/

相关文章:

java - 如何从另一种方法动态地向 react 器热通量添加元素?

clojure - RxClojure - rx/return 和 rx/observable* 之间有什么区别?

audio - NI Reaktor音频输入垂直线

android - Rxjava zip运算符通过检查第一个Observable的数据来过滤第二个Observable android

Android Observables.zip 列出可观察对象

java - 如何使用 hibernate 在 java 中正确实现 owner-owned-owner2 关联?

java - 露天 Activity 新工作流程添加

java - 线程安全保护

java - 在 Linux 上启动 java web start 应用程序的问题

android - 如何将变量从可观察值返回到另一种可观察类型