gpt4 book ai didi

android - 使用 Rx Java 读取文件

转载 作者:搜寻专家 更新时间:2023-11-01 07:42:49 25 4
gpt4 key购买 nike

我有一个文件夹中的许多文件,我正在读取这些文件并将其内容存储到数据库中。如何使用 RX Java 随后执行相同的操作?因为我有很多文件要读取并且在异步任务中花费了很多时间

String path = "some path";
File directory = new File(path);
File[] files = directory.listFiles();
Log.d(TAG, "Size: " + files.length);
for (int i = 0; i < files.length; i++) {
Log.d(TAG, "FileName -> " + files[i].getName());

//execute async to read file
}

最佳答案

在 RxJava 中,您可以非常轻松地将单线程方法替换为多线程(与不使用 RxJava 相比)。 AsyncTask 使用 executeOnExecutor(Executor exec, Params... params) 提供并行执行,因此您当前的实现可以针对 AsyncTask 进行调整以处理单个文件而不是完整的目录。但是你的问题是关于 RxJava 的。

多线程将加快文件读取速度 - 速度提升将取决于很多因素,但主要因素是您的闪存顺序读取/随机读取速度。鉴于这将是一个冷的 Observable,使用 Flowable 真的没有意义,因为背压不会在这里发挥作用。

实现某种多线程的伪代码:

    Observable.just(directory)
.flatMap(dir ->
Observable.fromArray(dir.listFiles()))
.filter(File::isFile)
.flatMap(file ->
Observable.just(file)
.map(this::readFileFunctionWithReturn)
.subscribeOn(Schedulers.io())) // execute on multiple threads
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) // observe on UI, or choose another Scheduler
.subscribe(fileResult -> {
// unordered results
});

如果您想对线程进行更细粒度的控制,也可以创建由 Executor 支持的自定义 Scheduler 实现,即自定义 ThreadFactory

关于android - 使用 Rx Java 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51983554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com