zoukankan      html  css  js  c++  java
  • zlib用法

    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; 

     

  • 相关阅读:
    iOS中的 .p12 证书的应用
    时间戳
    阿里云的esc
    iOS9 以上的真机调试 不用证书
    iOS UICollectionView数据少导致不能滚动
    jquery.js 库中的 选择器
    多媒体开发之---H.264中I帧和IDR帧的区别
    多媒体开发之---h264中 TS/ES 的区别
    多媒体开发之---h264中nal简介和i帧判断
    多媒体开发之---h264格式详解
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940758.html
Copyright © 2011-2022 走看看