登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: delphi序列化对象的方法总结[zt]     [回主站]     [分站链接]
delphi序列化对象的方法总结[zt]
clq
浏览(65) - 2024-08-24 21:11:40 发表 编辑

关键字:

delphi序列化对象的方法总结[zt]

https://www.cnblogs.com/hnxxcxg/archive/2011/02/25/2940626.html

ObjectBinaryToText
ObjectTextToBinary

这两个函数很重要。

--------------------------------------------------------

delphi序列化对象的方法总结

1.组件对象的序列化

从TCOMPONENT继承下来的组件对象序列化都简单,因为它本身支持流化,通过流化也就达到了序列化组件对象的目的。

TReader和TWriter都只支持Tcomponent流化,除非你自己写个TReader和TWriter,就有可能支持TPersiten的流化.
function ComponentToString(Component: TComponent): string;

var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;

end;
finally
BinStream.Free
end;
end;

function StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(nil);

finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;



2.非组件对象的序列化

非组件对象,也就是从TObject或者从Tpersisten继承下来的对象的序列化却要变通一下。

方法很简单,就是sizeof(TMyObject)的大小,定义一个buffer指向对象,直接把那一块内存写入文件,反序列化时从文件读取就可以了,
这就是对非组件对象有效的序列化.



服务端序列化对象发送流程:

第一步:

var

buffer: array[0..1023] of char;//定义一个缓冲区

第二步:

Move(myobj, Buffer, Sizeof(count));//将对象的内存搬移到缓冲区

第三步:

WriteFileFromBuffer();//将缓冲区写入文件

第四步:

发送这个文件给客户端



客户端反序列化还原对象流程:

第一步:

接收這個文件

第二步:

ReadFileToBuffer()

第三步:

move(buffer,myobj,sizeof(count)) //还原对象








总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1