Difference between StreamReader.Read and StreamReader.ReadBlock

14,486

ReadBlock does not mean it is thread safe. If you use Reflector to look at the implementation of StreamReader.ReadBlock (which is inherited from TextReader.ReadBlock), all it does is make multiple calls to the "Read" method until either the "Read" method returns 0 or we have read as many bytes as requested. This is needed because the "Read" method will not necessarily return as many bytes as you asked for.

Share:
14,486
Ken-F
Author by

Ken-F

Updated on June 17, 2022

Comments

  • Ken-F
    Ken-F almost 2 years

    The documentation simply says ReadBlock is

    "a blocking version of Read"

    but what does that mean?

    Someone else has asked the question before but, huh?

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

    The guy answering said

    Basically, it means that you can rely on StreamReader.ReadBlock not returning until either it's read as much as you've asked it to, or it's reached the end of the stream.

    Am I understanding correctly that this is required because Read may not give you everything you asked for? And that just because it returns 0 does NOT mean you reached the end of the file?

    So this means check something other than the number of bytes returned (EndOfStream?) or use ReadBlock instead?