我遇到了一些帖子,他们认为流不是一个可靠的数据结构,这意味着读/写操作可能不会在所有情况下都执行。
所以:
a)这一共识是否属实?
b)如果是,在哪些情况下读/写操作可能会失败?
我遇到的关于streams的共识声称,您应该循环执行读/写操作,直到完成:
var bytesRead = 0;
var _packet = new byte[8192];
while ((bytesRead += file_reader.Read(_packet, bytesRead, _packet.Length - bytesRead)) < _packet.Length) ;发布于 2011-02-10 22:33:48
嗯,这取决于你正在谈论的操作,以及你认为它是失败的那一层。
例如,如果您试图读过流的末尾(即,从只包含100字节的文件中读取1000字节,或者从比1000更接近文件末尾的位置读取1000字节),则剩余的字节将更少。流读取方法返回它们实际设法读取的字节数,因此您应该检查该值。
至于写操作,如果磁盘已满或其他类似问题,则写入文件可能会失败,但如果是写操作,则会返回一个异常。
如果您正在写入套接字或其他网络流,则不能保证即使Write方法返回时没有异常,另一端也能够接收到它,在此过程中可能会出现大量问题。
但是,为了减轻您的担忧,流本身并不是不可靠的。
然而,他们与之交谈的媒介可以是。
发布于 2011-02-10 22:33:26
如果您遵循文档,在发生错误时捕获并采取相应的措施,我想您会发现流几乎是防弹的。有大量的代码在这种可靠性上进行了投资。
我们可以看到那些声称不是这样的人的链接吗?要么你误解了,要么他们是不正确的。
https://stackoverflow.com/questions/4958312
复制相似问题