我一直在研究利用流的东西,我发现自己并不清楚某些流概念(你也可以在About redirected stdout in System.Diagnostics.Process查看我发布的另一个问题)。
1.你是否表示你已经完成了写一个流,写了类似EOF的东西?
2.关注上一个问题,如果我已经将一个EOF(或类似的东西)写入流但是没有关闭流,那么我想写一些其他内容到同一个流,我可以开始写它不需要设置吗?
3.如果一个过程试图读取一个没有人写过任何东西的流(如stdin),那么读取过程将被阻止,最后一些数据到达并且程序将只读到写入完成,通过获取0个字节读取而不是被阻止来表示,现在如果该过程向同一个流发出另一个读取,它仍将得到0计数并立即返回,而我预计它将被阻止现在没人在写这个流。那么当流被打开但是没有人写入它并且有人完成了写作会话时,流是否保持不同的状态?
我正在使用Windows .net框架,如果有任何特定于平台的话。
非常感谢!
答案 0 :(得分:3)
这取决于具体的流。例如,在您描述的情况下,从MemoryStream读取不会阻止。这是因为MemoryStream具有明确的大小,并且当您从流中读取时,指针通过流进行到达结束,此时Read将返回0.如果MemoryStream中没有数据,则首先读取会立即返回0。
您所描述的内容适合NetworkStream,在这种情况下,从“服务器”端关闭由NetworkStream包装的基础Socket时,从流中读取将阻塞,直到数据可用为止读取将返回0.
所以实际的细节取决于流,但在高层次,他们都被视为相同,即。您可以从流中读取,直到Read返回0。
答案 1 :(得分:1)
流没有“EOF”。您写入流直到关闭它,这将阻止它进一步写入。
Streams只读取和写入字节。就是这样。