BufferedStream Seek返回不同的结果

时间:2011-03-11 18:43:34

标签: c#

非常奇怪的行为

如果我在文件顶部创建一个缓冲流,然后寻找一个偏移量,我会得到一个字节块

如果我将调试器移回搜索并重新搜索,我会得到额外的两个字符

我已经三次检查了这个

这个类可能有错误吗?

如果我重新回到位置,我希望得到相同的 - 文件没有改变 - 我在只读模式下打开它,我根据Origin寻找

复制:

bufferedStream.Seek(100,0, 100)
bufferedStream.Reade(buffer, 0, 100)

与你从这里得到的不同

bufferedStream.Seek(100,0, 100)
bufferedStream.Reade(buffer, 0, 100)

1 个答案:

答案 0 :(得分:0)

首先,如果没有检查返回值,很难知道它们是否相同Read - 它们是否可能只选择不同的块? (完全有效;确保循环使用Read是您的工作,直到您有足够的数据或EOF)。

但是,我想知道这里是否涉及到BOM - 特别是如果您正坐在文本阅读器之上。简单地说,读者期望在开始处的BOM;所以它可能会在第一时间隐藏它。但是如果你在使用相同的阅读器/解码器时回放流,它期待一个BOM,所以会尝试将其作为字符数据报告(或者根据配置抛出错误)