5

标题或多或少说明了一切。通话记录在案:

Here forTextReader.Read Method (Char[], Int32, Int32)
Here forTextReader.ReadBlock()具有相同的参数类型。

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

    StreamReader r = new StreamReader(new MemoryStream(rawData, 0, 184, false, false));
    r.Read.....

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

4

1 回答 1

7

如果你可以对部分结果做一些有用的事情,然后调用 Read() 并处理你得到的东西。特别是如果您正在循环并处理每个 Read() 的结果,那么请执行此操作而不是使用 ReadBlock()。

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

如果您使用 Reflector 查看 StreamReader.ReadBlock(继承自 TextReader.ReadBlock)的实现,它所做的只是多次调用“Read”方法,直到“Read”方法返回 0 或我们读为请求的许多字节。这是必需的,因为“读取”方法不一定会返回您要求的那么多字节。

于 2012-05-09T05:54:00.143 回答