要在TStream类中移动"当前字节"指针,我们可以使用属性Position(例如MyStream.Position:= 0)或使用Seek方法(例如MyStream.Seek(0,soFromBeginning).问题是,哪一个更有效(又快点??(我没有源,所以我自己无法检查).
到目前为止,我总是使用Seek定位指针.
Uwe*_*abe 10
与TStream.Seek
处理32位或64位值的重载函数一样,它取决于当前流实现,这可能是更好的选择.
例如,TCustomMemoryStream
实现32位版本Seek()
.当您Position
在该流上设置时,它将首先调用64位版本,该版本在调用32位版本时将值转换为Longint.(这可能会随着64位版本的Delphi而改变!)
另一方面,a THandleStream
实现了64位版本Seek()
.当您Seek()
使用32位值调用时,您最终会调用一个非常讨厌的机制来调用64位版本.
我的个人建议是设定Position
.至少它将来是更好的选择.
除了Position属性setter的函数调用开销之外,没有区别,因为设置Position属性调用Seek与给定值并从头开始:
procedure TStream.SetPosition(const Pos: Int64);
begin
Seek(Pos, soBeginning);
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10517 次 |
最近记录: |