Vert.x 将缓冲区写入 WriteStream?

标签 vert.x

在我正在实现的 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();

关于Vert.x 将缓冲区写入 WriteStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49108812/

相关文章:

java - 在将 Quarkus Hibernate Reactive 与 quarkus-reactive-client 一起使用时如何使用一些阻止方法?

java - vertx 中的并行/并发调用

docker - 如果手动创建vert.x实例,则群集Vert.x在docker中不起作用

ruby-on-rails - 异步应用服务器与多个阻塞服务器

java - 从事件总线获得回复后,vertx 垂直部署

java - 为什么 Vert.x 被称为响应式,尽管它是单线程的

java - vert.x 的logging.properties 中的含义是什么?

java - 如何使用postgres sql客户端获取vertx中插入记录的id

docker - 大厅gradle java build CI

java - 为什么 Vert.x codegen 无法创建 rx-fied 类?