unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
edt1: TEdit;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
uses Zlib;//delphi7 自带这Zlib.pas

//压缩
procedure TForm1.btn1Click(Sender: TObject);
var
cs:TCompressionStream;
fs,ms:TMemoryStream;
num:Integer;
begin
{第一步: 调入要压缩的文件, 并获取大小}
fs:=TMemoryStream.Create;
fs.LoadFromFile('a.fr3');
num:=fs.Size;

{第二步: 建立接收的流, 并先写入原始文件大小}
ms:=TMemoryStream.Create;
ms.Write(num,SizeOf(num));

{第三步: 压缩}
cs:=TCompressionStream.Create(clMax,ms); //压缩比例最大化,ms为接受流
fs.SaveToStream(cs); //保存流到压缩流
cs.Free; {压缩流 Free 后才真正完成压缩, 所以提前 Free}
ms.SaveToFile('a.zipx'); //delphi通过zlib压缩后生成的文件,winnar解压不了
ms.Free;
fs.Free;
end;

//解压缩
procedure TForm1.btn2Click(Sender: TObject);
var
ds: TDecompressionStream; {解压流}
fs,ms: TMemoryStream; {fs 是准备要解压的流; ms 是接受解压数据的流}
num: Integer; {接受文件压缩前的大小}
begin
{第一步: 准要解压的文件}
fs := TMemoryStream.Create;
fs.LoadFromFile('a.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('b.fr3');

ds.Free;
ms.Free;
fs.Free;
end;

//序列化
procedure TForm1.btn3Click(Sender: TObject);
var
stream:TStream;
const
path='m.dat';
begin
stream:=TFileStream.Create(path,fmCreate);
stream.WriteComponentRes(edt1.ClassName,edt1); //写入资源到文件,edt1.ClassName可以为'xxx'等,可以随便命名
stream.Free;
end;

//反序列化
procedure TForm1.btn4Click(Sender: TObject);
var
stream:TStream;
const
path='m.dat';
begin
stream:=TFileStream.Create(path,fmOpenRead);
stream.ReadComponentRes(edt1); //读取资源到控件
stream.Free;
end;

end.

最新文章

  1. 《数据结构与算法分析》学习笔记(三)——链表ADT
  2. ACM 16进制的简单运算
  3. mvc edmx 的config文件
  4. 通过代码的方式完成WCF服务的寄宿工作
  5. 解决duilib使用zip换肤卡顿的问题:修改duilib并使用资源文件换肤
  6. [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !
  7. <转>maven发布第三方jar的一些问题
  8. retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
  9. Python-数据类型-转摘
  10. grep 同时满足多个关键字、满足任意关键字和排除关键字
  11. Python 中关于 round 函数的坑
  12. glance系列一:glance基础
  13. CentOS 5.5 防火墙开启、关闭以及开放指定端口
  14. C# 开发代码标准
  15. docker 1.13.1 启动容器过程中mount报错
  16. (原创)C++11改进我们的程序之move和完美转发
  17. 基于HTML5手机登录注册表单代码
  18. RabbitMQ负载均衡方案之LVS
  19. ldap禁止匿名用户登录
  20. Linux安装JDK详细步骤(rpm方式)

热门文章

  1. 012-PHP创建一个多维数组
  2. poj 1854 Evil Straw Warts Live 变成回文要几次
  3. (一)微信小程序环境搭建
  4. TBLASTN
  5. 记一次Win上MySQL乱码问题
  6. P1011 A+B 和 C
  7. MSDN原版系统镜像ISO下载站
  8. Linux gcc(ar命令)打包库到另一个库中的另外一种方法
  9. Linux下的文件目录树结构
  10. FULLTEXT INDEX全文索引