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)) //还原对象