标题或多或少说明了一切。电话记录在案:
TextReader.Read Method (Char[], Int32, Int32)
的{p> Here
和TextReader.ReadBlock()
,Here。
我想提取一个字节数组的一部分,为此构成一个MemoryStream
,我打算用StreamReader
读取,如下所示:
StreamReader r = new StreamReader(new MemoryStream(rawData, 0, 184, false, false));
r.Read.....
我应该使用哪一个?其中一个更快还是更好?
答案 0 :(得分:5)
如果您可以使用部分结果执行某些有用的操作,请调用Read()并处理您获得的内容。特别是如果你循环并处理每个Read()的结果然后执行此操作而不是使用ReadBlock()。
ReadBlock中的“块”一词是指阻塞的动作,而不是下一个“块”的字节。所以它会强制停止进一步执行直到它完成。
如果使用Reflector查看StreamReader.ReadBlock(继承自TextReader.ReadBlock)的实现,它所做的就是多次调用“Read”方法,直到“Read”方法返回0或者我们已读取所请求的字节数。这是必需的,因为“Read”方法不一定会返回您要求的字节数。