- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于 TStringStream,使用其 Bytes
属性的 bytes
与使用 TStream.Read
提取的 bytes
不同。如下图:
TStream.Read
提取的字节
代表正确的数据。Bytes
属性的 bytes
包含更多数据。 bytes
的最后一个字节与错误bytes
的最后一个字节不同)您能帮忙评论一下可能的原因吗?非常感谢您的帮助!
PS:Delphi XE、Windows 7。(Delphi 7 中的 TStringStream 似乎没有 LoadFromFile 或 SaveToFile。)
PS:示例文件可以从网盘下载:REF_EncodedSample & REF_DecodedSample 。 (Zlib 压缩图像文件。)。
procedure CompareBytes_2;
var
ss_1: TStringStream;
ss_2: TStringStream;
sbytes_Read: TBytes;
sbytes_Property: TBytes;
len_sbytes_Read: Integer;
len_sbytes_Property: Integer;
filename: string;
begin
filename := 'REF_EncodedSample'; // textual data
// filename := 'REF_DecodedSample'; // non-textual data
ss_1 := TStringStream.Create;
ss_1.LoadFromFile(filename);
ss_2 := TStringStream.Create;
ss_2.LoadFromFile(filename);
ss_1.SaveToFile(filename+ '_CopyByStringStream_1');
ss_2.SaveToFile(filename+ '_CopyByStringStream_2');
len_sbytes_Read := ss_1.Size;
SetLength(sbytes_Read, len_sbytes_Read);
ss_1.Read(sbytes_Read[0], len_sbytes_Read);
sbytes_Property := ss_2.Bytes;
ShowMessage(
BoolToStr(
Length(sbytes_Read) = Length(sbytes_Property),
True));
ShowMessage(
BoolToStr(
sbytes_Read[len_sbytes_Read - 1] = sbytes_Property[len_sbytes_Read - 1],
True));
ss_1.Free;
ss_2.Free;
end;
最佳答案
字符串流documentation状态:
The Bytes property returns the buffer in which the data is stored. Use the Size property to find the actual amount of data in the buffer.
推测缓冲区已被分配以容纳比实际需要更多的空间。仅缓冲区的前 Size 字节包含有效内容。
<小时/>此外,对 ss_1.Read 的调用有点毫无意义,因为在调用 SetLength 后 Length(sbytes_Read) 不会改变。当从流中读取时,您将使用 ReadBuffer 而不是 Read。 WriteBuffer 同样如此。
关于delphi - 为什么 TStringStream.Bytes 与从 'TStream.Read' 获取的内容不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353069/
要移动 TStream 类中的“当前字节”指针,我们可以使用属性 Position(例如 MyStream.Position := 0)或使用 Seek 方法(例如 MyStream.Seek(0,
TStream类包含许多 WriteData 的重载其形式如下: function WriteData(const Buffer: Int32; Count: Longint): Longint; o
我正在尝试将字符串转换为 TStream。下面的代码在 CopyFrom 行上给出了“抽象错误”消息。我在这里遇到了困难,有什么办法可以解决这个问题吗? procedure StringToStrea
通过 Indy 发送 TMemoryStream 的最佳方式是什么? 目前我正在尝试: procedure TClientForm.IdTCPClient1Connected(Sender: TObj
这是从 Apache Edgent Documentation 中获取的代码 我不明白元组到底是什么。代码如下: public static void main(String[] args) thro
我正在从流中读取组件,并且希望能够指定 Owner 属性。 var TComponent : comp; stream.Seek(0, soFromBeginning); comp :=
我正在使用 Delphi 7 并使用 StringList,以 TStream 作为对象。 我的测试项目有一个列表框、一个备忘录和 2 个按钮(添加和删除)。 这是我到目前为止得到的: var L
我的 MySQL 数据库上有一个存储过程,带有 2 个 Blob 类型的 OUT 参数 我想通过 UniDAC 的 SP 组件将它们的值作为 TStream 获取,我已尝试使用此代码进行测试: SP
当我尝试运行以下简单代码序列时,收到Abstract Error 错误消息: type TForm1 = class(TForm) Image1: TImage; Button1:
我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并正常读取流。我的问题是,在 TStream 对象可供读取之前,方法调用需要一段时间才能
我正在 Delphi XE2 中使用 TCP/IP 协议(protocol)开发 DataSnap 项目,该项目需要将二进制数据流作为方法参数传递到服务器。我遇到的问题是流内容似乎有大约 32 KB
我需要从 Stream 中读取数据并将读取的缓冲区放入 OleVariant (VarArray) 变量中。 var MemoryStream : TMemoryStream; Data : OleV
我正在尝试使用 TBlobStream 方法将附件数据从 IMAP 服务器插入到 MySQL 数据库。 procedure TForm1.Button1Click(Sender: TObject);
我使用 Delphi XE2 构建了一个 DataSnap REST 服务器,并添加了一个通过 TStream 上传文件的服务器方法: function TServerMethods.updateUp
我正在使用 C++Builder,并且正在尝试慢慢地将代码迁移到使用 C++ 标准库而不是 Delphi VCL。 VCL 有一个基于 TStream 类的流架构,我正在改用 std::stream。
我有一个 Delphi 10.1 Berlin Datasnap 服务器,它无法返回大于大约 260.000 字节的数据包(通过 TStream)。 我按照 Delphi 的 \Object Pasc
我正在尝试编写一个 Delphi 控制台应用程序,为其标准输入创建一个 TStream,并为其标准输出创建另一个 TStream。 (它将由主机应用程序启动,其输入和输出重定向到管道,并将二进制数据传
我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并读取流来下载文件。服务器方法非常简单: function TServerMethods
如下面代码的Test2所示,TStringList被转换为TStream,然后TStream又被转换回TStringList。然而,在 Delphi 7 中 Test2 给出的结果与 Test1 相同
对于 TStringStream,使用其 Bytes 属性的 bytes 与使用 TStream.Read 提取的 bytes 不同。如下图: 使用TStream.Read提取的字节代表正确的数据。
我是一名优秀的程序员,十分优秀!