有人可以向我解释差异吗?
我试图谷歌但却找不到太多信息。也许我没有使用正确的关键字。
非常感谢任何见解。
答案 0 :(得分:13)
stream.Seek(x, SeekOrigin.Begin);
和stream.Position = x;
都会将流位置设置为x
。区别在于Position
setter无条件地丢弃任何读取缓冲区,而Seek
方法尝试保留缓冲区中仍与新位置相关的部分。
你必须测试,哪一个对你的场景更快,但是肯定存在性能差异,并且在所有情况下都不会更快。我真的很想知道为什么没有记录这种差异。
答案 1 :(得分:3)
在你的例子中没有区别。
Stream.Position
和Stream.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字节偏移量。”