关于Stream的一些事情

时间:2010-05-29 05:51:54

标签: c# .net stream

我一直在研究利用流的东西,我发现自己并不清楚某些流概念(你也可以在About redirected stdout in System.Diagnostics.Process查看我发布的另一个问题)。

1.你是否表示你已经完成了写一个流,写了类似EOF的东西?

2.关注上一个问题,如果我已经将一个EOF(或类似的东西)写入流但是没有关闭流,那么我想写一些其他内容到同一个流,我可以开始写它不需要设置吗?

3.如果一个过程试图读取一个没有人写过任何东西的流(如stdin),那么读取过程将被阻止,最后一些数据到达并且程序将只读到写入完成,通过获取0个字节读取而不是被阻止来表示,现在如果该过程向同一个流发出另一个读取,它仍将得到0计数并立即返回,而我预计它将被阻止现在没人在写这个流。那么当流被打开但是没有人写入它并且有人完成了写作会话时,流是否保持不同的状态?

我正在使用Windows .net框架,如果有任何特定于平台的话。

非常感谢!

2 个答案:

答案 0 :(得分:3)

这取决于具体的流。例如,在您描述的情况下,从MemoryStream读取不会阻止。这是因为MemoryStream具有明确的大小,并且当您从流中读取时,指针通过流进行到达结束,此时Read将返回0.如果MemoryStream中没有数据,则首先读取会立即返回0。

您所描述的内容适合NetworkStream,在这种情况下,从“服务器”端关闭由NetworkStream包装的基础Socket时,从流中读取将阻塞,直到数据可用为止读取将返回0.

所以实际的细节取决于流,但在高层次,他们都被视为相同,即。您可以从流中读取,直到Read返回0。

答案 1 :(得分:1)

流没有“EOF”。您写入流直到关闭它,这将阻止它进一步写入。

Streams只读取和写入字节。就是这样。