您的位置:首页 > 编程语言 > Delphi

关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)

2011-08-26 16:21 489 查看
unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses Zlib; {压缩流 TCompressionStream 与解压缩流 TDecompressionStream 来自 Zlib 单元}

//压缩

procedure TForm1.Button1Click(Sender: TObject);

var

cs: TCompressionStream; {定义压缩流}

fs,ms: TMemoryStream; {fs 是要压缩的流; ms 是接收压缩后文件的流}

num: Integer; {原始文件大小}

begin

{第一步: 调入要压缩的文件, 并获取大小}

fs := TMemoryStream.Create;

fs.LoadFromFile('c:\temp\test.txt'); {文件要存在啊}

num := fs.Size;

{第二步: 建立接收的流, 并先写入原始文件大小}

ms := TMemoryStream.Create;

ms.Write(num, SizeOf(num));

{第三步: 压缩}

cs := TCompressionStream.Create(clMax, ms); {参数1是压缩比; 参数2是接收流}

fs.SaveToStream(cs); {传入要压缩的数据}

cs.Free; {压缩流 Free 后才真正完成压缩, 所以提前 Free}

{第四步: 保存}

ms.SaveToFile('c:\temp\test.zipx');

{第五步: 释放}

ms.Free;

fs.Free;

{压缩比参数:

clNone 无压缩

clFastest 快速

clDefault 默认

clMax 最大比例

}

end;

//解压缩

procedure TForm1.Button2Click(Sender: TObject);

var

ds: TDecompressionStream; {解压流}

fs,ms: TMemoryStream; {fs 是准备要解压的流; ms 是接受解压数据的流}

num: Integer; {接受文件压缩前的大小}

begin

{第一步: 准要解压的文件}

fs := TMemoryStream.Create;

fs.LoadFromFile('c:\temp\test.zipx'); {必须是上一个压缩方法生成的文件}

{第二步: 读出文件压缩前的大小}

fs.Position := 0;

fs.ReadBuffer(num,SizeOf(num));

{第三步: 准备好要接收的流, 并设置需要的大小}

ms := TMemoryStream.Create;

ms.SetSize(num);

{第四步: 解压}

ds := TDecompressionStream.Create(fs); {参数是要解压的流}

{第五步: 把解压后的数据读出存放到已准备好接收的流}

ds.Read(ms.Memory^, num);

{第六步: 保存}

ms.SaveToFile('c:\temp\test2.txt');

ds.Free;

ms.Free;

fs.Free;

end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: