咏南数据序列(还原)类

咏南数据序列(还原)类

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

  

  

 

  

 

  

原文地址:https://www.cnblogs.com/hnxxcxg/p/10400389.html