加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:57:05 所属栏目:大数据 来源:网络整理
导读:关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream) unit Unit1; interface uses ? Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,? Dialogs,StdCtrls; type ? TForm1 = class (TForm)? ? Button1:

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

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:temptest.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:temptest.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:temptest.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:temptest2.txt');

? ds.Free;
? ms.Free;
? fs.Free;
end;

end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读