带过滤器和映射的RxJava rx.exceptions.MissingBackpressureException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了带过滤器和映射的RxJava rx.exceptions.MissingBackpressureException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1839字,纯文字阅读大概需要3分钟。
内容图文
![带过滤器和映射的RxJava rx.exceptions.MissingBackpressureException](/upload/InfoBanner/zyjiaocheng/788/19506c10c5be4ac481d63bd6617e4de3.jpg)
我刚刚开始使用RxJava / RxAndroid,并且有一些问题需要了解如何正确处理背压.
我有一个文件扫描程序observable扫描目录和发出文件.应尽可能快地处理这些文件,而不必跳过任何文件.
所以管道看起来像这样:
可观察到的与LT;文件> – >过滤<文件,布尔> {检查文件是否为.xyz类型}
不幸的是,我得到了rx.exceptions.MissingBackpressureException错误.所以我读到了背压,如果我理解正确的话,损失较少的选项只有缓冲区和窗口.
我试过onBackpressureBuffer(),buffer()和window().虽然所有onBackpressureX()命令似乎都没有效果,但buffer()将项目分组到List< File>中.我的问题是:
>我该如何过滤这些群组?过滤器(< List< File>>,Boolean)没有意义……
>如何在我的文件扫描程序中实现可观察的背压处理,以便等到我的管道/操作符/订户具有容量?
>使用例如转换项目是一种好习惯吗? map()到XYZ-Entities并将它们存储在一个单独的List中,而不是主动订阅者,但作为操作符的副作用?
一些反馈或甚至提示将有很多帮助,值得赞赏.
解决方法:
我想我找到了问题的解决方案:
此代码无效:
Observable<File> task = scanner.getProcessDirectoryTask(mountPoint);
Subscription _subscription = task
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.onBackpressureBuffer(10000)
.filter(new Func1<File, Boolean>() {
@Override
public Boolean call(File file) {
return file.getAbsolutePath().endsWith("xyz");
}
})
.buffer(100)
.subscribe(new Observer<List<File>>() { /*whatever you want to do*/ }
但是这段代码工作正常:
Observable<File> task = scanner.getProcessDirectoryTask(mountPoint);
Subscription _subscription = task
.onBackpressureBuffer(10000)
.filter(new Func1<File, Boolean>() {
@Override
public Boolean call(File file) {
return file.getAbsolutePath().endsWith("xyz");
}
})
.buffer(100)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<File>>() { /*whatever you want to do*/ }
因此看来订阅订单()和订阅订单()有一个巨大的差异!
我的第三个问题是偏离主题但仍然开放.也许有人可以对此发表评论.
内容总结
以上是互联网集市为您收集整理的带过滤器和映射的RxJava rx.exceptions.MissingBackpressureException全部内容,希望文章能够帮你解决带过滤器和映射的RxJava rx.exceptions.MissingBackpressureException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。