- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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 早于 overload
的引入关键字(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 参数的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27150816/
我正在尝试使用我的 iPhone 向服务器发送消息并接收响应。我可以使用以下方式连接到服务器: telnet 123.123.123.1 6000 Trying 123.123.123.1... Co
本文整理了Java中org.I0Itec.zkclient.ZkClient.readData()方法的一些代码示例,展示了ZkClient.readData()的具体用法。这些代码示例主要来源于Gi
本文整理了Java中com.github.zkclient.ZkClient.readData()方法的一些代码示例,展示了ZkClient.readData()的具体用法。这些代码示例主要来源于Gi
我正在尝试在 PySide 中子类化 QFile 以实现自定义读取行为。但是,如下面的简化代码所示,即使子类的 readData 实现只是调用了父类的 readData 函数,返回的数据也是不正确的。
从 DESFire EVO1 卡(AES 加密)读取数据时,出现 InvalidResponseLengthException。我正在使用 taplinx 库版本 1.5 我的代码如下所示: priv
本文整理了Java中org.apache.helix.manager.zk.ZkClient.readData()方法的一些代码示例,展示了ZkClient.readData()的具体用法。这些代码示
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.readData()方法的一些代码示例,展示了ZkClientX.readData()的具
本文整理了Java中com.alibaba.otter.canal.common.zookeeper.ZkClientx.readData()方法的一些代码示例,展示了ZkClientx.readDa
TStream类包含许多 WriteData 的重载其形式如下: function WriteData(const Buffer: Int32; Count: Longint): Longint; o
我使用 readData 成功读取了 16 位音频文件并生成了用于波形显示的峰值文件。但是,我在解释 24 位 FLAC 和 WAV 文件的 PCM 值时遇到了一些问题。 首先,24 位的 block
我正在尝试对 FMOD 库中的 Sound.readData 和 Sound.lock 之间的差异进行排序(我正在使用 C#/C++ 进行编程,但我会使用任何语言来回答!)。最终目标是创建波形 Vie
我想使用 libcurl 将文件分块上传到远程 Http 服务器。我调用以下函数来设置 READDATA 和 READFUNCTION 以注册回调参数。但是 libcurl 在 curl_easy_p
我是一名优秀的程序员,十分优秀!