另一种可能更有效的转储 Stdin 内容的方法是这样的:
module dumpstdin;
import tango.io.Console : Cin;
import tango.io.device.Array : Array;
import tango.io.model.IConduit : InputStream;
const BufferInitialSize = 4096u;
const BufferGrowingStep = 4096u;
ubyte[] dumpStream(InputStream ins)
{
auto buffer = new Array(BufferInitialSize, BufferGrowingStep);
buffer.copy(ins);
return cast(ubyte[]) buffer.slice();
}
import tango.io.Stdout : Stdout;
void main()
{
auto contentsOfStdin
= cast(char[]) dumpStream(Cin.stream);
Stdout
("Finished reading Stdin.").newline()
("Contents of Stdin was:").newline()
("<<")(contentsOfStdin)(">>").newline();
}
Run Code Online (Sandbox Code Playgroud)
一些注意事项:
dumpStream返回 aubyte[]因为char[]被定义为 UTF-8 字符串,而 Stdin 不一定需要如此。例如,如果有人通过管道将二进制文件传输到您的程序,您最终会得到一个无效文件,char[]如果有任何东西检查它的有效性,则可能会引发异常。如果您只关心文本,那么将结果转换为 achar[]就可以了。copy是接口上的一种方法OutputStream,导致它耗尽所提供InputStream的所有输入。