STDIN / STDOUT是一次性刷新数据还是逐个字符?

时间:2010-05-09 03:50:31

标签: c# stdout

我正在使用C#来读取另一个程序的STDOUT。如果我这样做:

StreamReader reader = process.StandardOutput;
reader.ReadToEnd();

是否可以保证将最后一件事全部冲到程序的STDOUT?或者有点像TCP,我必须有一个消息终止符或长度标题?

2 个答案:

答案 0 :(得分:1)

默认情况下,StandardOutput是缓冲的,这意味着您可能会从另一端(或多个整个消息)获取整个消息。但它并没有真正得到保证,特别是因为您正在阅读的过程可能已经改变了StandardOutput的缓冲。

消息终结器将是解决问题的最佳方式。虽然通常在进程通过StandardOutput进行通信时,所有内容都是基于行的,因此只需使用换行符作为消息终止符,这可能是最简单和最常见的起点。

答案 1 :(得分:0)

reader.ReadToEnd()在进程终止之前不会返回,所以在调用之后你应该看到它写入stdout的所有内容。缓冲只会影响它从其他程序到读者缓冲区的速度,但是你的代码无法区分(至少在这个线程上),因为它仍在等待ReadToEnd()返回。