咏南数据序列(还原)类
咏南数据序列(还原)类
支持序列(还原)的类型:除了支持所有基本的数据类型(integer, string, datetime, date, time,float),还支持 对象、结构体、数据集数据
1)不基于任何三方商业控件,无任何版权纠纷。
2)通过“节点”标示不同的对象和数据集数据,一次可序列(还原)N个对象和数据集的数据,主从表数量不限。
3)使用GZIP压缩数据后,再进行网络传输。
4)序列(还原)支持跨操作系统。
5)序列(还原)的接口非常简单。
6)数据集数据可使用的序列格式:bin、json、xml,默认使用bin格式。
7)支持TCP\WEBSOCK\HTTP\HTTPS各种通讯控件进行数据序列(还原)。
先上图:
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