对Zlib单元进行再封装

对Zlib单元进行再封装

低版本DELPHI,如D7,ZLIB.pas单元封装的很简陋,因此有必要再封装,以增加使用的便利性。

高版本DELPHI,zlib.pas本身提供的接口已经相当完善。

Zlib.pas是DELPHI自带的压缩单元,下面对对Zlib单元进行再封装,增加两个压缩函数,一个压缩流,一个压缩字符串:

分别在D7和XE10.3.1下面,测试通过。

unit Unit1;

interface

uses
  ZLib, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
// 两个过程都有Compress参数,这个参数用来决定进行压缩操作还是解压操作: True--压缩; false--解压.
procedure Zip(Input, Output: TStream; Compress: Boolean); overload;

function Zip(Input: string; Compress: Boolean): string; overload;

implementation

{$R *.dfm}

procedure Zip(Input, Output: TStream; Compress: Boolean);
const
  MAXBUFSIZE = 1024 * 16; //16 KB
var
  CS: TCompressionStream;
  DS: TDecompressionStream;
  Buf: array[0..MAXBUFSIZE - 1] of Byte;
  BufSize: Integer;
begin
  if Assigned(Input) and Assigned(Output) then
  begin
    if Compress then     // 压缩
    begin
      CS := TCompressionStream.Create(ZLib.clDefault, Output);
      try
        CS.CopyFrom(Input, 0); //从开始处复制
      finally
        CS.Free;
      end;
    end
    else
    begin        // 解压
      DS := TDecompressionStream.Create(Input);
      try
        BufSize := DS.Read(Buf, MAXBUFSIZE);
        while BufSize > 0 do
        begin
          Output.Write(Buf, BufSize);
          BufSize := DS.Read(Buf, MAXBUFSIZE);
        end;
      finally
        DS.Free;
      end;
    end;
  end;
end;

function Zip(Input: string; Compress: Boolean): string;
var
  InputStream, OutputStream: TStringStream;
begin
  if Input = '' then
    Exit;
  InputStream := TStringStream.Create(Input);
  try
    OutputStream := TStringStream.Create('');
    try
      Zip(InputStream, OutputStream, Compress);
      Result := OutputStream.DataString;
    finally
      OutputStream.Free;
    end;
  finally
    InputStream.Free;
  end;
end;

end.

  

转载于:https://www.cnblogs.com/hnxxcxg/p/11100238.html

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值