流可靠性

时间:2011-02-10 14:28:01

标签: c#

我遇到了一些帖子,其中声称这些流不是一个可靠的数据结构,这意味着在所有情况下都可能无法读取/写入操作。

所以:

a)这种共识是否有任何道理?

b)如果是这样,那么读/写操作可能会失败的情况是什么?

我遇到的关于流的共识声称你可以循环读/写操作直到完成:

var bytesRead = 0;
var _packet = new byte[8192];    
while ((bytesRead += file_reader.Read(_packet, bytesRead, _packet.Length - bytesRead)) < _packet.Length) ;

2 个答案:

答案 0 :(得分:3)

嗯,这取决于你所谈论的操作,以及你认为它失败的那个层。

例如,如果您尝试读取流的末尾(即,从仅包含100个字节的文件读取1000个字节,或从距离文件末尾更近的位置读取1000个字节) 1000),你将获得更少的字节。流读取方法返回它们实际设法读取的字节数,因此您应该检查该值。

对于写入操作,如果磁盘已满或写入其他类似问题,写入文件可能会失败,但在写入操作的情况下,您将收到异常。

如果您正在写入套接字或其他网络流,则无法保证即使Write方法无异常地返回,另一端也能够接收它,也有大量问题可能会出现问题。方式。

但是,为了减轻您的顾虑,流本身并不是不可靠的。

然而,与他们交谈的媒介可以是。

答案 1 :(得分:2)

如果您按照文档进行操作,请在发生错误时进行相应的捕获并采取相应措施,我认为您会发现流非常具有防弹性。有大量代码投入了这种可靠性。

我们可以看到那些声称不同的人的链接吗?要么你误解了,要么他们是不正确的。