zoukankan      html  css  js  c++  java
  • 咏南数据序列(还原)类

    咏南数据序列(还原)类

    支持序列(还原)的类型:除了支持所有基本的数据类型(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;
    

      

      

     

      

     

      

  • 相关阅读:
    Benchmarking Apache Kafka, Apache Pulsar, and RabbitMQ: Which is the Fastest?
    Kafka实战:集群SSL加密认证和配置(最新版kafka-2.7.0)
    Postgresql 编译安装教程
    CentOS在线和离线安装PostgreSQL
    ubuntu apt-get update连不上dl.google.com解决方法
    ubuntu E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法
    ubuntu apt-get更新出现W: GPG error: http://repo.mysql.com trusty InRelease
    hadoop3.2.2 ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes
    Hudi on flink v0.7.0 使用遇到的问题及解决办法
    RocksDB in Flink官方答疑:Using RocksDB State Backend in Apache Flink: When and How
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10400389.html
Copyright © 2011-2022 走看看