delphi – TStream.WriteData和TStream.ReadData的Count参数的目的是什么?

delphi – TStream.WriteData和TStream.ReadData的Count参数的目的是什么?,第1张

概述TStream类包含许多WriteData重载,具有以下形式: function WriteData(const Buffer: Int32; Count: Longint): Longint; overload; 所有常见的嫌疑人,AnsiChar,Char,UInt32,Double等都有重载.同样适用于ReadData.我试图了解Count参数的用途.上述过载的实现如下: function TStream类包含许多WriteData重载,具有以下形式:

function WriteData(const Buffer: Int32; Count: Longint): Longint; overload;

所有常见的嫌疑人,AnsiChar,Char,UInt32,Double等都有重载.同样适用于ReadData.我试图了解Count参数的用途.上述过载的实现如下:

function TStream.Skip(Amount: Integer): Integer;var  P: Integer;begin  P := position;  Result := Seek(Amount,soCurrent) - P;end;function TStream.WriteData(const Buffer: Int32; Count: Longint): Longint;const  BufSize = SizeOf(Buffer);begin  if Count > BufSize then    Result := Write(Buffer,BufSize) + Skip(Count - BufSize)  else    Result := Write(Buffer,Count)end;

我可以清楚地看到这段代码的作用,但我无法理解为什么执行部分写入会有意义.为什么用Count<来调用这个函数是有意义的? BUFSIZE?那时的行为很奇怪. 有谁知道为什么要添加这些重载以及它们的目的是什么?我自然而然地看过documentation这些方法无话可说.

另外,我将提交有关此行的错误报告:

Result := Write(Buffer,BufSize) + Skip(Count - BufSize);

假设对Write的调用将在调用Skip之前发生,这是错误的.未定义运算符对运算符的评估顺序.这段代码应该像这样编写:

Result := Write(Buffer,BufSize);inc(Result,Skip(Count - BufSize));
解决方法 理论制作

如果TStream早于引入了重载关键字(Delphi 3 IIRC),他们可能会引入一种方法来编写可能是int32的整数.当使用“byte”变量调用函数时,它将作为Integer传递给函数,然后Count参数只允许写入一个字节.现在他们支持这个以实现向后兼容.

在某些情况下(如下一个),支持Count< Bufsize确实特别愚蠢:

function WriteData(const Buffer: Int8; Count: Longint): Longint; overload;

另一个理由是在下一种情况下,变量只需要保存为流作为Int8,但在程序执行期间作为Int32处理(因为它传递给只接受var:Int32作为参数的函数).

procedure SomeProc(var MyInt : Integer);procedure DoSomeStream;var  iVal : Integer;//  bVal : ShortInt;begin  SomeProc(iVal);  Stream.WriteData(iVal,SizeOf(Byte));  //Instead of//  SomeProc(iVal);//  bVal := iVal;//  Stream.WriteData(bVal)end;

我不是说它是必需的(可以解决),但在某些情况下,它可能是有用的.

总结

以上是内存溢出为你收集整理的delphi – TStream.WriteData和TStream.ReadData的Count参数的目的是什么?全部内容,希望文章能够帮你解决delphi – TStream.WriteData和TStream.ReadData的Count参数的目的是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存