• 咏南数据序列(还原)类


    咏南数据序列(还原)类

    支持序列(还原)的类型:除了支持所有基本的数据类型(integer, string, datetime, date, time,float),还支持 对象、结构体、数据集数据

    1)不基于任何三方商业控件,无任何版权纠纷。

    2)通过“节点”标示不同的对象和数据集数据,一次可序列(还原)N个对象和数据集的数据,主从表数量不限。

    3)使用GZIP压缩数据后,再进行网络传输。

    4)序列(还原)支持跨操作系统。

    5)序列(还原)的接口非常简单。

    6)数据集数据可使用的序列格式:bin、json、xml,默认使用bin格式。

    7)支持TCPWEBSOCKHTTPHTTPS各种通讯控件进行数据序列(还原)。

    先上图:

    procedure TForm1.Button1Click(Sender: TObject);
    //序列 还原对象
    var
      t, t2: TTest;
      d, d2: TynSerial;
      ms: TMemoryStream;
    begin
      // 序列
      t := TTest.Create;
      t2 := TTest.Create;
      ms := TMemoryStream.Create;
      d := TynSerial.Create(ms);
      t.id := 1;
      t.name2 := '对象';
      d.WriteObject('node1', t);
      d.PrepareSerial;
      // 还原
      d2 := TynSerial.Create(ms);
      d2.ReadObject('node1', t2);
      Memo1.Lines.Add(t2.id.ToString);
      Memo1.Lines.Add(t2.name2);
      // 释放
      t.Free;
      t2.Free;
      ms.Free;
      d.Free;
      d2.Free;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    //序列 还原 FIREDAC数据集
    var
      d, d2: TynSerial;
      ms: TMemoryStream;
      ms2: TMemoryStream;
    begin
      // 序列
      ms := TMemoryStream.Create;
      ms2 := TMemoryStream.Create;
      d := TynSerial.Create(ms);
      // 序列数据集1
      FDQuery1.Close;
      FDQuery1.SQL.Clear;
      FDQuery1.SQL.Add('select * from tgoods');
      FDQuery1.Open;
      d.WriteFDDataSet('node1', 'dataset1', FDQuery1);
      // 序列数据集2
      FDQuery1.Close;
      FDQuery1.SQL.Clear;
      FDQuery1.SQL.Add('select * from tunit');
      FDQuery1.Open;
      d.WriteFDDataSet('node1', 'dataset2', FDQuery1);
      // 序列基本类型
      d.WriteString('node1', 'str', '字符串');
      d.WriteInteger('node2', 'int', 258);
      // 准备
      d.PrepareSerial;
      // 压缩
      ms.Position := 0;
      ZCompressStream(ms, ms2);
      // 解压
      ms2.Position := 0;
      ms.Clear;
      ZDecompressStream(ms2, ms);
      //还原
      d2 := TynSerial.Create(ms);
      // 还原数据集1
      d2.ReadFDDataSet('node1', 'dataset1', FDMemTable1);
      DataSource1.DataSet := FDMemTable1;
      // 还原数据集2
      d2.ReadFDDataSet('node1', 'dataset2', FDMemTable2);
      DataSource2.DataSet := FDMemTable2;
      // 还原基本类型
      Memo1.Lines.Add(d2.ReadString('node1', 'str', ''));
      Memo1.Lines.Add(d2.ReadInteger('node2', 'int', 0).ToString);
      // 释放
      ms.Free;
      ms2.Free;
      d.Free;
      d2.Free;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    //序列 还原DataSetProvider1.Data
    var
      d, d2: TynSerial;
      ms: TMemoryStream;
      ms2: TMemoryStream;
    begin
      // 序列
      ms := TMemoryStream.Create;
      ms2 := TMemoryStream.Create;
      d := TynSerial.Create(ms);
    
      FDQuery1.Close;
      FDQuery1.SQL.Clear;
      FDQuery1.SQL.Add('select * from tgoods');
      d.WriteOleVariant('node1', 'dataset', DataSetProvider1.Data);
      d.PrepareSerial;
    
      ms.Position := 0;
      ZCompressStream(ms, ms2); // 压缩
    
      // 还原
      ms2.Position := 0;
      ms.Clear;
      ZDecompressStream(ms2, ms); // 解压
      d2 := TynSerial.Create(ms);
      d2.ReadOleVariant('node1', 'dataset', ClientDataSet1);
      DataSource1.DataSet := ClientDataSet1;
      // 释放
      ms.Free;
      ms2.Free;
      d.Free;
      d2.Free;
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    //序列还原结构体
    var
      r, r2: TRec;
      d, d2: TynSerial;
      ms: TMemoryStream;
    begin
      // 序列
      r.id := 1;
      r.name2 := '结构体';
      ms := TMemoryStream.Create;
      d := TynSerial.Create(ms);
      d.WriteRecord('node1', 'record', r, SizeOf(r));
      d.PrepareSerial;
      // 还原
      d2 := TynSerial.Create(ms);
      d2.ReadRecord('node1', 'record', r2, SizeOf(r2));
      Memo1.Lines.Add(r2.id.ToString);
      Memo1.Lines.Add(string(r2.name2));
      // 释放
      ms.Free;
      d.Free;
      d2.Free;
    end;
    
    procedure TForm1.Button5Click(Sender: TObject);
    //序列还原文件
    var
      d, d2: TynSerial;
      ms, ms2: TMemoryStream;
    begin
      //序列
      ms := TMemoryStream.Create;
      d := TynSerial.Create(ms);
      d.WriteFile('node1', 'file', ExtractFilePath(ParamStr(0)) + '1.exe');
      d.PrepareSerial;
      //压缩
      ms2 := TMemoryStream.Create;
      ms.Position := 0;
      ZCompressStream(ms, ms2);
      //解压
      ms.Clear;
      ms2.Position := 0;
      ZDecompressStream(ms2, ms);
      //还原
      d2 := TynSerial.Create(ms);
      d2.ReadFile('node1', 'file', 'd:1.exe');
      //释放
      ms.Free;
      ms2.Free;
      d.Free;
      d2.Free;
    end;
    

      

      

     

      

     

      

  • 相关阅读:
    VS Visual Studio connection(); Microsoft Visulal Studio vNext & Azure
    无废话WCF入门教程六[一个简单的Demo]
    JS代码混淆 支持PHP .NET PERL
    C#/vbscript/JS如何加密保护HTML/javascript源代码
    JavaScript加密解密7种方法总结分析
    模型融合---Stacking调参总结
    模型融合---Xgboost调参总结
    模型融合---GBDT调参总结
    为什么正则化可以减小过拟合?
    python中的filter、map、reduce、apply用法
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10400389.html
Copyright © 2020-2023  润新知