TextReader上的Read()和ReadBlock()调用有什么区别?

Mar*_*cel 4 c# stream streamreader textreader

标题或多或少都说明了一切.电话记录:

这里 for TextReader.Read Method (Char[], Int32, Int32)
Here用于TextReader.ReadBlock()相同的参数类型.

我想提取一个字节数组的一部分,为此我构成一个MemoryStream我打算用StreamReader这样的方式读取:

    StreamReader r = new StreamReader(new MemoryStream(rawData, 0, 184, false, false));
    r.Read.....
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一个?其中一个更快还是更好?

Zah*_*med 5

如果你可以用部分结果做一些有用的事情,那么调用Read()并处理你得到的结果.尤其是,如果你是通过循环和每个读取(结果工作),那么做到这一点,而不是读出数据块().

ReadBlock中的"块"一词指的是阻塞的动作,而不是下一个"块"的字节.所以它会强制停止进一步执行直到它完成.

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

  • 引用您的来源:/sf/answers/41464321/ (4认同)
  • 感谢您澄清“块”一词。 (2认同)