问题描述
我想将一个vibe.d流(例如HTTPClientResponse.bodyReader(类型为{{1}})保存到文件中,还要将其他潜在的vibe.d流保存到文件中,如何最好地在内存有效的情况下做到这一点没有将所有数据复制到RAM的方法?
解决方法
通常,要使用HTTP客户端下载文件,可以使用vibe.inet.urltransfer软件包,该软件包提供了download
便利功能,该功能执行HTTP请求,处理重定向并将最终输出存储到文件中。 / p>
download(url,file);
但是,如果要获取原始输入流(例如,在不处理重定向时),则可以使用vibe.core.file : openFile打开/创建文件作为文件流,然后对其进行写入。
要写入文件流,您有两个选择:
- 您直接致电
file.write(otherStream)
- 否则,您可以使用vibe.core.stream : pipe
vibe.d urltransfer模块内部正在使用直接在write
对象上调用FileStream
的方法,并且建议将其直接从流中读取到写入缓冲区中,而不是在文件中使用使用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);