C# 关于小溪的事

C# 关于小溪的事,c#,.net,stream,C#,.net,Stream,我一直在做一些利用流的事情,我发现自己对一些流概念不太清楚(你也可以查看我在上发布的另一个问题) 1.您如何表示您已经完成了流的编写,编写了类似EOF的东西 2.按照前面的问题,如果我已经向流中写入了EOF(或类似的内容),但没有关闭流,那么我想向同一流中写入其他内容,我是否可以开始向其写入,而不需要更多设置 3.如果一个过程试图读取一个没有人向其写入任何内容的流(如stdin),则读取过程将被阻止,最后一些数据到达,并且该过程将一直读取,直到写入完成,这表示读取的字节数返回0,而不是被阻止,现

我一直在做一些利用流的事情,我发现自己对一些流概念不太清楚(你也可以查看我在上发布的另一个问题)

1.您如何表示您已经完成了流的编写,编写了类似EOF的东西

2.按照前面的问题,如果我已经向流中写入了EOF(或类似的内容),但没有关闭流,那么我想向同一流中写入其他内容,我是否可以开始向其写入,而不需要更多设置

3.如果一个过程试图读取一个没有人向其写入任何内容的流(如stdin),则读取过程将被阻止,最后一些数据到达,并且该过程将一直读取,直到写入完成,这表示读取的字节数返回0,而不是被阻止,现在,如果该过程对同一个流发出另一次读取,它仍然会得到一个0计数并立即返回,而我希望它会被阻止,因为现在没有人向该流写入。那么,当流被打开但还没有人写入时,以及当有人完成写入会话时,流是否保持不同的状态

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


非常感谢

这取决于混凝土流。例如,从数据库读取数据不会像您所描述的那样阻塞。这是因为MemoryStream有一个显式的大小,当您从流中读取时,指针将在流中前进,直到到达末尾,此时读取将返回0。如果MemoryStream中没有数据,则第一次读取将立即返回0

您描述的内容适用于,在这种情况下,从流中读取将被阻止,直到数据可用为止,当“服务器”端关闭由网络流包装的底层时,读取将返回0

因此,实际细节取决于流,但在高级别上,它们都被视为相同的ie。您可以从流中读取,直到读取返回0。

流没有“EOF”。在关闭流之前一直写入流,这会阻止进一步写入流


流只是读取和写入字节。仅此而已。

stdin stdout流的工作方式是否与NetWorkStream基本相同?@sforester,stdin/stdout是与NetWorkStream类似的非随机访问流,因此没有预先确定流数据何时结束,流读取将在流关闭时结束。