This question already has an answer here:
Difference between StreamReader.Read and StreamReader.ReadBlock

(1 个回答)


5年前关闭。




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

Here 表示 TextReader.Read Method (Char[], Int32, Int32)
Here 用于具有相同参数类型的 TextReader.ReadBlock()

我想提取字节数组的一部分,为此我编写了一个 MemoryStream,我打算用 StreamReader 像这样读取它:
    StreamReader r = new StreamReader(new MemoryStream(rawData, 0, 184, false, false));
    r.Read.....

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

最佳答案

如果你可以用部分结果做一些有用的事情,然后调用 Read() 并处理你得到的结果。特别是如果您要循环遍历并处理每个 Read() 的结果,则执行此操作而不是使用 ReadBlock()。

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

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

关于c# - TextReader 上的 Read() 和 ReadBlock() 调用有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10497575/

10-12 04:08