我想保存一个vibe.d流,如HTTPClientResponse.bodyReader(类型为InterfaceProxy!InputStream
(,以及其他潜在的vib.d流到文件中,如何在不将所有数据复制到RAM的情况下,以内存高效的方式做到这一点?
通常,使用HTTP客户端下载文件时,您可以使用vibe.inet.ultransfer包,该包提供download
便利功能,用于执行HTTP请求、处理重定向并将最终输出存储到文件中。
download(url, file);
但是,如果你想获取原始输入流(例如,在不处理重定向时(,你可以使用vibe.core.file:openFile打开/创建一个文件作为文件流,然后写入。
要写入文件流,您有两个选项:
- 您可以直接致电
file.write(otherStream)
- 否则,您可以使用vibe.core.stream:pipe
在FileStream
对象上直接调用write
是vibe.d urltransfer模块内部使用的方法,也建议用于文件,因为它将直接从流读取到写缓冲区,而不是使用pipe
将使用的额外临时缓冲区。
样品:
// createTrunc creates a file if it doesn't exist and clears it if it does exist
// You might want to use readWrite or append instead.
auto fil = openFile(filename, FileMode.createTrunc);
scope(exit) fil.close();
fil.write(inputStream);