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
但是,如果您想要 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 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();