如何使用Vert.x泵将Observable <buffer>写入文件?

时间:2017-12-21 19:01:46

标签: rx-java2 vert.x

我想使用Vert.x 3.5.0 Pump(RxJava2变体)将 rs Observable的所有发出的缓冲区流式传输到文件中。以下示例在某种程度上不起作用,我不知道为什么。

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.junit.Test;

import io.reactivex.Observable;
import io.vertx.core.file.OpenOptions;
import io.vertx.reactivex.core.Vertx;
import io.vertx.reactivex.core.buffer.Buffer;
import io.vertx.reactivex.core.file.AsyncFile;
import io.vertx.reactivex.core.streams.Pump;

public class PumpTest {

    @Test
    public void testPump() throws IOException {
        Vertx vertx = Vertx.vertx();
        File file = new File("target/test");
        file.delete();

        Observable<Buffer> rs = Observable.just(Buffer.buffer("test123"));
        vertx.fileSystem().rxOpen(file.getAbsolutePath(), new OpenOptions()).map(f -> {
            Pump pump = Pump.pump(rs, f);
            pump.start();
            return f;
        }).map(AsyncFile::flush).subscribe(AsyncFile::close);
        assertEquals("test123", FileUtils.readFileToString(file));
    }
}

1 个答案:

答案 0 :(得分:0)

查看ReadStream<T>Pump.pump的第一个参数)的文档指向ReadStreamSubscriber类。哪个可以将一个可观察量变成一个读取流。

而不是rsReadStreamSubscriber.asReadStream(rs, Function.identity())应该在提供的代码中工作。