码迷,mamicode.com
首页 > 其他好文 > 详细

对Zlib单元进行再封装

时间:2019-06-28 01:01:51      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:from   log   compress   use   rom   try   dia   boolean   assign   

对Zlib单元进行再封装

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

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.

  

对Zlib单元进行再封装

标签:from   log   compress   use   rom   try   dia   boolean   assign   

原文地址:https://www.cnblogs.com/hnxxcxg/p/11100238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!