rx-java创建两个文件,并从字符串输入中压缩它们

问题描述 投票:0回答:1

我需要编写一个将字符串作为输入的函数,然后生成两个文件,并将它们压缩在一起。对于非反应性代码,它希望:

void func(String input){
    byte[] a = generateFileForA(input);
    byte[] b = generateFileForB(input);
    byte[] zip = zipFiles(a,b);
    doSomethingWithZip(zip);
}

如何使用rx-java以反应方式实现这种逻辑?

rx-java reactive-programming rx-java2
1个回答
0
投票

我不确定您的特定用例,还是不确定将Rx用于此特定工作的好处(除了可能简单地线程化之外。)>

但是像这样的伪代码会起作用:

public class Zip {

public static void main(String[] args) {

    final Zip zip = new Zip();
    final Disposable d = zip.func("some input")
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.single())
            .subscribe(result -> { }, System.out::println);
}

Single<byte[]> func(String input) {
   return Single.zip(
           generate(input, new File("myFileA")), 
           generate(input, new File("myFileB")), 
           this::zipFiles);
}

private Single<byte[]> generate(String input, File output) {
    return Single.fromCallable(() -> {
        // Do Work
        return new byte[0];
    }).subscribeOn(Schedulers.io()); /* Parallel execution */
 }

private byte[] zipFiles(byte[] a, byte[] b) {

    // Do work
    return new byte[0];
}

}

© www.soinside.com 2019 - 2024. All rights reserved.