Streams为什么使用Seek(0L,SeekOrigin.Begin)而不是Location = 0,反之亦然

时间:2011-05-04 21:28:19

标签: c# asp.net

有人可以向我解释差异吗?

我试图谷歌但却找不到太多信息。也许我没有使用正确的关键字。

非常感谢任何见解。

3 个答案:

答案 0 :(得分:13)

stream.Seek(x, SeekOrigin.Begin);stream.Position = x;都会将流位置设置为x。区别在于Position setter无条件地丢弃任何读取缓冲区,而Seek方法尝试保留缓冲区中仍与新位置相关的部分。

你必须测试,哪一个对你的场景更快,但是肯定存在性能差异,并且在所有情况下都不会更快。我真的很想知道为什么没有记录这种差异。

答案 1 :(得分:3)

在你的例子中没有区别。

Stream.PositionStream.Seek之间的实际差异是Position使用绝对偏移,而Seek使用相对于第二个参数指定的原点的偏移。

答案 2 :(得分:3)

据我所知,至少对于这个具体案例,没有。

方法Seek()和属性Position要求CanSeek为真,所以从我看到的是实现者。

Seek确实允许从指定位置(SeekOrigins)搜索到偏移量(MSDN上给出的示例有些复杂,但代表了目的:http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx)。

位置是绝对的,显然不适合搜索。

你刚才提到的情况恰好相同。

就我个人而言,我使用.Position = 0移动到流的开头,因为它比我更清楚地读取“使用文件的开头作为原点并移动这个0字节偏移量。”