Vert.x 将缓冲区写入 WriteStream?

Vert.x Write Buffer to WriteStream?

在我正在实施的 Vert.x verticle 中,我有一个先前加载到内存中的缓冲区,现在我想将其转储到磁盘中。

据我所知,我们应该使用 Pump 来确保不会使 WriteStream 过载。

但我没有找到从缓冲区获取 ReadStream 子实例的方法。难道不应该有一个简单/标准的方法来做到这一点吗?

此致

通常,vert.x 不会对直接写入 AsyncFile 的任何问题发出警告。此外,他们在这里提供了直接使用 AsyncFile.write 的相应示例,并声明您可以使用这些直接编写: http://vertx.io/docs/vertx-core/java/#_asynchronous_files

但是,如果您想要 pumpBuffer,您需要一个 ReadStream<Buffer> 的实例以及一个 AsyncFile 来注入。您可以使用 PitchPoint Solutions 的实现(版权所有 2016 The Simple File Server Authors):

https://github.com/pitchpoint-solutions/sfs/blob/master/sfs-server/src/main/java/org/sfs/io/BufferReadStream.java

综合起来:

CompletableFuture<Void> done = new CompletableFuture<>();

Buffer buffer = Buffer.buffer(new byte[100]);

Vertx.vertx().fileSystem.open("myfile.txt", new OpenOptions(), res -> {
    if (res.succeeded()) {
        AsyncFile outputFile = res.result();

        BufferReadStream reader = new BufferReadStream(buffer)
        Pump pump = Pump.pump(reader, outputFile);
        pump.start();
        reader.endHandler((r) -> {
            pump.stop(); // not sure this is required
            done.complete(null);
        });

    } else {
        // Something went wrong!
    }
});

// wait elsewhere
done.get();