关于 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.

相关文章推荐

Windows外壳扩展保护文件夹

利用Windows外壳扩展保护文件夹         Windows系统支持以下7类的外壳扩展功能:     (1)Context menu handlers向特定类型的文件对象增添上下文相关菜单; ...

FFMPEG+SDL2.0流媒体开发3---简易MP4视频播放器,提取MP4的H264视频序列解码并且显示

简介 之前写了一遍提取MP4中的音视频并且解码,这一篇引入SDL2.0来显示解码后的视频序列 实现一个简易的 视频播放器。 我这里用的FFMPEG和SDL2.0都是最新版的 可能网上的资料不是很...

delphi xe5 android 开发实现手机打电话和发短信

其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.1.短信息.很简单方法a.不使用Intent而是...

Delphi7下SuperObject的JSON使用方法

uses    superobject;   procedure TForm1.FormCreate(Sender: TObject); var aJson: ISuperO...

用delphi实现rar文件的解压的方法

准备工作     下载winrar提供的动态链接库unrar.dll     http://www.rarlab.com/rar/UnRARDLL.exe(需解压)     下载为delphi提供的组...

DELPHI 利用WINRRA 实现压缩解压

解压:ShellExecute(Handle,’open’,’WinRar’,’e -r -y E:\MyCode\C1\升级程序\升级程序.rar f:\’,nil,SW_HIDE)压缩:Shell...

Delphi自带的的Zip比较好用简单

一、Delphi自带的的Zip比较好用简单,但对于复杂的压缩,要通过编码实现。 二、第三方控件VCLZIP,上手比较快,很方便。集成了各种压缩解压方式。 如果压缩单一文件,使用Delphi...

Linux 7z,tar解压缩 使用

1.解压一个文件并解包 如图: 7z x -so -o/home/qian/coded VimLite-498.tar.bz2 |tar x --directory ~/coded ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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