我遇到了一些帖子,其中声称这些流不是一个可靠的数据结构,这意味着在所有情况下都可能无法读取/写入操作。
所以:
a)这种共识是否有任何道理?
b)如果是这样,那么读/写操作可能会失败的情况是什么?
我遇到的关于流的共识声称你可以循环读/写操作直到完成:
var bytesRead = 0;
var _packet = new byte[8192];
while ((bytesRead += file_reader.Read(_packet, bytesRead, _packet.Length - bytesRead)) < _packet.Length) ;
答案 0 :(得分:3)
嗯,这取决于你所谈论的操作,以及你认为它失败的那个层。
例如,如果您尝试读取流的末尾(即,从仅包含100个字节的文件读取1000个字节,或从距离文件末尾更近的位置读取1000个字节) 1000),你将获得更少的字节。流读取方法返回它们实际设法读取的字节数,因此您应该检查该值。
对于写入操作,如果磁盘已满或写入其他类似问题,写入文件可能会失败,但在写入操作的情况下,您将收到异常。
如果您正在写入套接字或其他网络流,则无法保证即使Write方法无异常地返回,另一端也能够接收它,也有大量问题可能会出现问题。方式。
但是,为了减轻您的顾虑,流本身并不是不可靠的。
然而,与他们交谈的媒介可以是。答案 1 :(得分:2)
如果您按照文档进行操作,请在发生错误时进行相应的捕获并采取相应措施,我认为您会发现流非常具有防弹性。有大量代码投入了这种可靠性。
我们可以看到那些声称不同的人的链接吗?要么你误解了,要么他们是不正确的。