zlib用法

摘要:
useszlib;//使用Zlib压缩Src并将其存储在Dst中的过程PackStream(constSrc:TStream;Dst:TStream)中;varCompStream:T压缩流;开始//添加“Assert”以防止错误的输入参数Assert(SrcNil);断言(DstNil);CompStream:=T压缩流

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; 

 

免责声明:文章转载自《zlib用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分解uber依赖注入库dig-使用篇如何使用Navicat for SQLite 触发器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux下的压缩和解压缩命令gzip/gunzip

作者:邓聪聪 Linux下的压缩和解压缩命令——gzip/gunzip yum -y install zip gzip (--安装压缩工具) gzip命令 gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。 gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又...

【转载】Linux系统下源代码包方式安装PHP开发环境

########节选自《细说PHP》################ 2.2 Linux系统下源代码包方式安装环境 在Linux平台下安装PHP有几种方法:使用配置和编译过程,或是使用各种预编译的包。在Linux上安装软件,用户最好的选择是下载源代码包,并编译一个适合自己的版本。LAMP组合中每个成员都是开源的软件,都可以从各自的官方网站上免费下载安装程序...

ubuntu16.04 安装 nginx 服务器

版本 ubunt16.04 nginx-1.8.1 gcc-4.8.4 pcre-8.38 zlib-1.2.11 openssl-1.0.2n 前置环境配置 进入到 /usr/local 目录下执行下面1 2 3 4,此处路劲与之后安装nginx对应,需要注意* 1、gcc 源码编译依赖环境 apt-get install build-essent...

第九天 1-8 实战:安装nginx服务器

简介:使用nginx源码包,安装nginx服务器,并对其进行配置后,测试其成果。模仿百度主页! 第一步:检查依赖关系[root@xiaogan ~]# rpm -q zlib-devel pcre-develpackage zlib-devel is not installedpackage pcre-devel is not installed[root...

Centos7离线部署redis集群

  目录 一、安装redis需要的依赖 二、安装redis 三、部署redis集群 一、安装redis需要的依赖 1、安装GCC   1、检查是否安装gcc     命令: gcc  -v     如果能输出gcc版本信息,,说明安装了gcc。反之需要安装gcc   2、安装gcc     2.1创建目录/usr/local/gccSrc     2.2...

Nginx 安装与部署配置以及Nginx和uWSGI开机自启

下载 官方网站:https://nginx.org/en/download.html Windows下安装 安装 下载后解压(切记不能含有中文路径!!),文件结构如图(我解压的路径就有中文,记得拷贝放置于英文目录下即可!): 启动 两种方法: 1) 直接双击该目录下的"nginx.exe",即可启动nginx服务器; 2) 命令行进入该文件夹,执行st...