unit Unit1;interfaceuses 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.总结
以上是内存溢出为你收集整理的关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)全部内容,希望文章能够帮你解决关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)