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

转载 2016年06月02日 10:50:30

关于 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:\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)

unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F...
  • fyl_077
  • fyl_077
  • 2014年12月20日 23:04
  • 217

Delphi中流类的学习(一)

最近不怎么忙,看了一下万一老师的delphi博客学习了一下delphi中的流类。写一下我对delphi流的总结已助以后参考。流就是一段数据或一块内存,在面向对象的编程语言像Java和C#等里面都有这个...
  • zhenghui1
  • zhenghui1
  • 2011年06月08日 22:39
  • 1555

Delphi压缩流和解压流的应用

软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩...
  • mpg2012
  • mpg2012
  • 2013年09月09日 09:57
  • 2090

ZLib的数据压缩和解压缩

Delphi的开发者可以使用ZLib单元中定义的TCompressionStream进行数据压缩,使用TDecompressionStream解压缩ZLib压缩后的数据。它们的定义如下:TCustom...
  • zhouzuoji
  • zhouzuoji
  • 2007年11月20日 09:20
  • 1569

关于Delphi中流的使用-压缩与解压缩的函数

关于 Delphi 中流的使用(8) 压缩与解压缩的函数 //Zlib.pas//类:TCompressionStreamunit Unit1;interfaceuses Windows, Mess...
  • liyuju
  • liyuju
  • 2008年03月20日 12:45
  • 219

哈夫曼树实现文件压缩与解压缩

见识了360压缩的神奇后,想要实现自己的文件压缩程序,然后花了近一个星期的时间去完成文件压缩与解压缩,期间有很多坑,花了很长时间去调试它,最后把坑给填了(真心的感受到了程序员写代码时的小小粗心会把自己...
  • leex_brave
  • leex_brave
  • 2016年06月06日 21:23
  • 8977

7、压缩与解压缩

在hadoop中有两个地方需要用到压缩:其一是在HDFS上存储数据,节省存储空间;其二是集群间的通讯需要数据压缩,提高带宽的利用率。在java中一切输入输出都是以流的方式进行。一个可以读取字节序列的对...
  • petersmart123
  • petersmart123
  • 2016年03月01日 21:55
  • 260

linux常用的压缩与解压缩命令

1.gzip 压缩gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件]2.gunzip 解压这个命令与gzip的功能刚好相反,这个是解压。 用法 gunzip 选项...
  • u012702547
  • u012702547
  • 2015年07月05日 19:38
  • 1355

Delphi压缩图片代码

 Delphi压缩图片代码 添加引用:uses JPEG; //=====================图片处理函数,将覆盖原图片文件=======================...
  • xinxinweb
  • xinxinweb
  • 2014年09月24日 10:38
  • 1149

关于 Delphi 中流的使用(8) 压缩与解压缩的函数

unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F...
  • fyl_077
  • fyl_077
  • 2014年12月20日 23:04
  • 234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
举报原因:
原因补充:

(最多只允许输入30个字)