关于 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |