StreamReader.Read和StreamReader.ReadBlock之间的区别

时间:2009-02-26 20:16:35

标签: c# io streamreader

文档简单地说ReadBlock是

“Read的阻止版本”

但这是什么意思?

之前有人问过这个问题,但是,是吗?

http://www.pcreview.co.uk/forums/thread-1385785.php

那个回答说的人

  

基本上,这意味着您不能依赖StreamReader.ReadBlock   返回,直到它的读数和你要求的一样多,或者   它已到达流的末尾。

我是否正确理解这是必需的,因为Read可能无法提供您要求的所有内容?那只是因为它返回0并不意味着你到达文件的末尾?

所以这意味着检查返回的字节数以外的其他内容(EndOfStream?)或使用ReadBlock?

1 个答案:

答案 0 :(得分:32)

ReadBlock并不意味着它是线程安全的。如果你使用Reflector来查看StreamReader.ReadBlock(它继承自TextReader.ReadBlock)的实现,它所做的就是多次调用“Read”方法,直到“Read”方法返回0或者我们读取为请求的多个字节。这是必需的,因为“Read”方法不一定会返回您要求的字节数。