在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
uses
zlib; //将Src使用Zlib压缩后存入Dst当中 procedure PackStream(const Src:TStream; Dst:TStream); var CompStream: TCompressionStream; begin //增加“断言”以防止输入参数有误 Assert(Src <> Nil); Assert(Dst <> Nil); CompStream := TCompressionStream.Create(clDefault,Dst); try //将源数据的偏移转到首部 Src.Seek(0,soFromBeginning); //使用CopyFrom将源数据输入到压缩流,以实现压缩 CompStream.CopyFrom(Src,0); finally CompStream.Free; end; end; //将以zlib压缩的Src解压缩后存入Dst当中 procedure UnpackStream(const Src:TStream; Dst:TStream); var DecompStream: TDecompressionStream; NewSize: Int64; begin //增加“断言”以防止输入参数有误 Assert(Src <> Nil); Assert(Dst <> Nil); DecompStream:= TDecompressionStream.Create(Src); try //将源数据的偏移转到首部 NewSize := Src.Seek(0, soFromEnd); Src.Seek(0, soFromBeginning); //使用CopyFrom将源数据输入到解压缩流,以实现解压缩 //并得到实际解压缩后的数据大小(NewSize) //内部会使用AllocMem(System单元定义)对Dst进行内存重新分配 //所以,Dst的内存管理必须兼容AllocMem进行内存分配 NewSize := Dst.CopyFrom(DecompStream,NewSize); //重新设置Dst的实际大小(已经在解压缩过程当中进行重新分配) Dst.Size := NewSize; finally DecompStream.Free; end; end; //测试代码 procedure Test; var SrcStream,PackedStream,UnpackedStream:TMemoryStream; begin SrcStream := TMemoryStream.Create; try SrcStream.LoadFromFile('c:\test.xml'); PackedStream := TMemoryStream.Create; try //压缩 PackStream(SrcStream, PackedStream); PackedStream.Seek(0, soFromBeginning); PackedStream.SaveToFile('c:\test_xml.pk'); UnpackedStream := TMemoryStream.Create; try //解压缩 UnpackStream(PackedStream, UnpackedStream); UnpackedStream.Seek(0, soFromBeginning); UnpackedStream.SaveToFile('c:\test_xml.xml'); finally UnpackedStream.Free; end; finally PackedStream.Free; end; finally SrcStream.Free; end; end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论