delphi序列化对象的方法总结

    技术2022-05-20  56

    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)