使用TWriter.WriteString节省了两个额外的字节

在 Delphi 10.4.2 中,当我使用 TWriter.WriteString 时,会保存两个额外的字节:

var
  FileStream: TFileStream;
  Writer: TWriter;
begin
    FileStream := TFileStream.Create('stream.txt', fmCreate or fmOpenWrite or fmShareDenyNone);
    Writer := TWriter.Create(FileStream, $FF);
    try
      Writer.WriteString('2');
    finally
      Writer.Free;
      FileStream.free;
    end
end;

这两个字节是什么?我怎么能忽略它们?

回答

这是由TWriter.WriteString. 可能您的用例不是正确的。

第一个字节 ($06) 是值类型(TValueType.vaString用于您的代码)。第二个字节是字符串的长度(1 个字节)。

您可以在 Embarcadero 提供的源代码中的文件中找到所有这些信息System.Classes.pas

你不能忽视它们。也许您可以TStream.Write在没有额外负载的情况下编写字符串?

  • It should be noted that `TWriter.WriteString()` can store a `string` in one of 4 different formats, depending on which one produces the fewest bytes in the stream: `vaString` (type $06, 1-byte length, `AnsiChar` payload), `vaLString` (type $0C, 4-byte length, `AnsiChar` payload), `vaUTF8String` ($14, 4-byte length, `Byte` payload) or `vaWString` (type $12, 4-byte length, `WideChar` payload)

以上是使用TWriter.WriteString节省了两个额外的字节的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>