压缩与解压缩(TCompressionStream、TDecompressionStream)
2012-02-28 17:57
330 查看
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.
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)
- 关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
- Delphi中流的使用:压缩与解压缩(TCompressionStream、TDecompressionStream)
- 关于 Delphi 中流的使用 压缩与解压缩(TCompressionStream、TDecompressionStream)
- 关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
- 关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
- 关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
- 关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
- VB6结合GDI+实现内存(Stream)压缩/解压缩JPG(JPEG)图像
- C# 关于GZipStream压缩与解压缩数据丢失问题
- VB.net 2005内GZipStream类别可以针对档案做压缩、解压缩
- Compression and Decompression with the System.IO.Compression.GZipStream class
- C#压缩与解压缩流类 GZipStream 的使用
- C#压缩与解压缩流类 GZipStream 的使用
- 为何我用System.IO.Compression.GZipStream解压缩,速度这么慢?
- Linux下的压缩解压缩命令详解
- Java案例:压缩与解压缩文件
- tomcat配置gzip压缩与解压缩
- Linux下的压缩解压缩命令详解
- GitHub上一些实用的JavaScript的文件压缩解压缩库推荐