在c#中读取二进制数据/ ReadAsync不会读取计数中指定的所有内容

问题描述

我阅读了此博文https://jonskeet.uk/csharp/readbinary.html

FileStream可能只是将文件的前10个字节读入缓冲区。只有在某些数据可用(或到达流的末尾)之前,才能保证Read方法阻塞。

您知道ReadAsync是否需要做同样的考虑。

您还知道在哪种情况下会发生这种情况吗,Read / ReadAsync不会读取计数中指定的所有内容

解决方法

您还知道在哪种情况下会发生这种情况吗,Read / ReadAsync不会读取计数中指定的所有内容?

当可用数据较少时,请指定。


最琐碎的是您在文件末尾找到的位置。

MSDN所述:

如果当前可用的字节数小于请求的数目,则结果值可以小于请求的字节数;如果已到达流的末尾,则结果值可以为0(零)。

也很常见;从TCP / IP缓冲区读取时,尽管通常不会是FileStream。还有其他Stream个继承的类型,它们共享相同的方法。参见:System.IO.Stream