c# - 流可靠性

标签 c#

我看到一些帖子声称流不是可靠的数据结构,这意味着读/写操作可能无法在所有情况下进行。

所以:

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/

相关文章:

c# - 为每个 Page_Load 运行代码

c# - 我应该将安全代码与不安全代码混合使用吗?

c# - SQL 到 Linq 等价物

javascript - 需要将服务/工厂存储为值

javascript - SignalR 2.2 客户端未收到任何消息

c# - 在代理后面使用 BugzScout.net 有困难

c# - 处理用户请求时锁定 ASP.NET 控件

c# - 如何获取 TIFF 图像的字节数组并将其转换为 System.Drawing.Image 对象?

c# - UWP 如何隐藏应用程序?

c# - 如何使用 C#.NET HashTable 实现所需的 JSON 格式