在我正在实现的 Vert.x verticle 中,我有一个之前加载到内存中的缓冲区,现在我想将它转储到磁盘中。
据我所知,我们应该使用 Pump 来确保不会使 WriteStream 过载。
但我没有找到从缓冲区获取 ReadStream 子实例的方法。难道不应该有一种简单/标准的方法来做到这一点吗?
问候
最佳答案
一般来说,vert.x 不会对直接写入 AsyncFile
的任何问题发出警告。秒。此外,他们还提供了使用 AsyncFile.write
的相应示例。直接在这里并声明您可以使用这些直接编写:http://vertx.io/docs/vertx-core/java/#_asynchronous_files
但是,如果您想要 pump
与 Buffer
你需要一个 ReadStream<Buffer>
的实例连同 AsyncFile
泵入。您可以使用 PitchPoint Solutions 的实现(版权所有 2016 The Simple File Server Authors):
综合起来:
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/