zoukankan      html  css  js  c++  java
  • 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)) //还原对象

  • 相关阅读:
    去除Html标签
    asp.net弹出多个模态窗口
    window.returnValue的用法
    eTerm-用于报价的指令(GK状态码的使用)
    使用ffmpeg 操作音频文件前后部分静音移除.
    使用Visual Studio 2017开发python,并在iis上部署Python Django
    解决wampserver 服务无法启动
    网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。
    Scut游戏引擎改造兼容Codis。
    windows修改Host后未生效。
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940626.html
Copyright © 2011-2022 走看看