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;