在 c# / ReadAsync 中读取二进制数据而不是读取计数中指定的所有内容
Posted
技术标签:
【中文标题】在 c# / ReadAsync 中读取二进制数据而不是读取计数中指定的所有内容【英文标题】:Reading binary data in c# / ReadAsync not reading everything specified in the count 【发布时间】:2020-10-01 11:12:26 【问题描述】:我读了这篇博文https://jonskeet.uk/csharp/readbinary.html,
FileStream 可能只是将文件的前 10 个字节读入缓冲区。 Read 方法只保证在某些数据可用(或到达流的末尾)之前阻塞
您知道是否需要对 ReadAsync 进行同样的考虑。
您还知道在哪些情况下会遇到这种情况,Read / ReadAsync 没有读取计数中指定的所有内容?
【问题讨论】:
【参考方案1】:您还知道在哪些情况下会遇到这种情况,Read / ReadAsync 没有读取计数中指定的所有内容?
当可用数据少于指定时。
最简单的就是你打到文件结尾的地方。
正如MSDN 所说:
如果当前可用的字节数小于请求的数量,则结果值可以小于请求的字节数,或者如果已到达流的末尾,则结果值可以为 0(零)。
也很常见;从 TCP/IP 缓冲区读取时,尽管通常不会是 FileStream
。还有各种其他Stream
继承类型,它们共享相同的方法。见:System.IO.Stream
【讨论】:
我想知道的是,如果程序在本地读取文件是否会遇到这种情况,例如在本地获取一批 150 mb 文件的 8192 字节?可以部分读取批次吗? 是的,它不一定是可能的,但它是可能的,因为它取决于您对 FileStream 和其他组件的实现。典型的情况可能是硬件故障或读取指令超时。 @MariangeMarcano:所以,在正常情况下,如果你读到最后,你会得到所有的字节。以上是关于在 c# / ReadAsync 中读取二进制数据而不是读取计数中指定的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
python读取C#写的二进制文件,byte类型unpack