流的压缩和解压

 1 uses
 2   Zlib;
 3 
 4 //压缩函数
 5 procedure Zip(var fs: TMemoryStream);
 6 var
 7   cs: TCompressionStream;
 8   ms: TMemoryStream;
 9   num: Integer;
10 begin
11   if not(Assigned(fs) and (fs.Size>0)) then Exit;
12 
13     num := fs.Size;
14     ms := TMemoryStream.Create;
15     cs := TCompressionStream.Create(clMax, ms);
16   try
17     fs.SaveToStream(cs);
18     cs.Free;
19     //ms.Position := 0;
20     fs.Clear;
21     fs.WriteBuffer(num, sizeof(num));
22     fs.CopyFrom(ms, 0);
23   finally
24     ms.Free;
25   end;
26 end;
27 
28 //解压函数
29 procedure UnZip(var fs: Tmemorystream);
30 var
31   ds: TDecompressionStream;
32   ms: TMemoryStream;
33   num: Integer;
34 begin
35   if not(Assigned(fs) and (fs.Size>0)) then Exit;
36 
37   fs.Position := 0;
38   fs.ReadBuffer(num,sizeof(num));
39   ms := TMemoryStream.Create;
40   ds := TDecompressionStream.Create(fs);
41   try
42     ms.SetSize(num);
43     ds.Read(ms.Memory^, num);
44     //ms.Position := 0;
45     fs.Clear;
46     fs.CopyFrom(ms, 0);
47   finally
48     ds.Free;
49     ms.Free;
50   end;
51 end;
原文地址:https://www.cnblogs.com/jieke/p/2934207.html