2011-02-10 105 views
1

我遇到了几个帖子,声称流不是可靠的数据结构,这意味着在所有情况下读/写操作都可能不会遵循。流可靠性

所以:

a)这个共识有什么道理吗?

b)若还等什么在至极的情况下,读/写operaitions可能会失败?

在流,我穿过,你可以通过读/写操作要高度重视循环,直到完整的理赔来了这样的共识:

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

嗨,欢迎来到Stack Overflow。如果您遇到可以这样或那样的帖子,并在您的问题中提及这些帖子,请张贴指向这些帖子的链接,以便我们可以看到完整的上下文。也许这些帖子是错误的,也许有一些具体的案例,也许只是措辞是错误的。 – 2011-02-10 14:34:37

+0

你有没有提及你遇到的帖子?在正确的时间不在流上调用“Flush”可能会导致意外的结果,取决于您的场景,缺少断电或类似的情况(并且流在这种极端情况下与其他任何情况一样可靠),当数据被刷新时该流被关闭。 – 2011-02-10 14:35:46

+0

请提供您找到的帖子的链接。我使用了`C#流可靠性`,而我发现的唯一一个帖子就是你的。 :)我编写的代码可以使用Stream对象处理多个Gigabyte大小的文件,而不会有任何问题。 – 2011-02-10 15:37:43

回答

2

如果按照文件,渔获物和发生错误时采取相应的行动,我想你”会发现流是非常防弹的。有相当数量的代码投入了这种可靠性。

我们可以看到链接到这些谁主张,否则?要么你误会了,要么他们是不正确的。

3

那么,您层认为这是一个失败这取决于你在谈论,并在何种操作。例如,如果您尝试读取流尾(即,从只包含100个字节的文件中读取1000个字节,或者从距离文件末尾较近的位置读取1000个字节比1000),你会得到更少的字节。流读取方法返回它们实际设法读取的字节数,因此您应该检查该值。

至于写操作,写入一个文件可能,如果磁盘已满,或其他类似的问题失败,但在执行写入操作的情况下,你会得到一个异常。

如果你正在编写到插座或其他网络流,也不能保证,即使写方法返回无例外情况,即另一端能够接受它,有一吨的可以去错沿问题方式。

然而,为缓解您的顾虑,自己流不可靠。

他们谈论的介质,但是,可以是。