我看到一些帖子声称流不是可靠的数据结构,这意味着读/写操作可能无法在所有情况下进行。
所以:
a) 这个共识有什么道理吗?
b) 如果是这样,在什么情况下读/写操作可能会失败?
我遇到的这种关于流的共识声称你应该循环读/写操作直到完成:
var bytesRead = 0;
var _packet = new byte[8192];
while ((bytesRead += file_reader.Read(_packet, bytesRead, _packet.Length - bytesRead)) < _packet.Length) ;
最佳答案
好吧,这取决于你在谈论什么操作,以及你认为它失败的层。
例如,如果您尝试读取超过流的末尾(即从仅包含 100 字节的文件中读取 1000 字节,或者从比文件末尾更接近的位置读取 1000 字节1000),你会得到更少的字节。流读取方法返回它们实际读取的字节数,因此您应该检查该值。
对于写操作,如果磁盘已满或其他类似问题,写入文件可能会失败,但如果是写操作,您将返回异常。
如果您正在写入套接字或其他网络流,即使 Write 方法无异常返回,也无法保证另一端能够接收到它,在整个过程中可能会出现大量问题方式。
但是,为了减轻您的顾虑,流本身并非不可靠。
然而,他们与之交谈的媒介可以是。
关于c# - 流可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4958312/