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.

Delphi7 流操作_压缩的更多相关文章

  1. io流操作大全

    JAVA 中的IO流 一.流的概念        流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部 ...

  2. Scala进阶之路-I/O流操作之文件处理

    Scala进阶之路-I/O流操作之文件处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 说起Scala语言操作文件对象其实是很简单的,大部分代码和Java相同. 一.使用Scal ...

  3. Java高级特性1_流库_初体验

    Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...

  4. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

  5. [WCF编程]10.操作:流操作

    一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...

  6. Stream 流操作

     Stream 类 先看下面的图 Stream 是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream).流是字节序列的抽象概 ...

  7. delphi 基础之三 文件流操作

    文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...

  8. IOS文件操作的两种方式:NSFileManager操作和流操作

    1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

  9. C++流操作之fstream

    在Windows平台对文件进行存取操作可选的方案有很多,如果采用纯C,则需要用到File*等,当然也可以直接调用Windows API来做:如果采用C++,首先想到的就是文件流fstream.虽然在C ...

随机推荐

  1. notifix测试

    成功 失败 警告 提示

  2. 2.11 学习总结 之 ajax

    一.说在前面 昨天 学习了 json 数据结构 今天 学习ajax 并使用 json  二.jquery的ajax操作 1.查询jquery的官方文档发现与ajax相关的jquey方法如下: 1)$. ...

  3. POJ 2155:Matrix 二维树状数组

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 21757   Accepted: 8141 Descripti ...

  4. SharePreference的使用

    SharePreference 一般用于保存偏好设置,比如说我们设置里的条目 sharepreference使用步骤 1.拿到sharepreference //拿到share preference ...

  5. zoj 1483 划分类DP

    还是看了little_w大神写的才知道怎么写,看完发现自己题意也理解错了,里面有个neighboring,意思就是你指定任务的时候指定的是原序列中连续的一段 然后就是怎么DP了,新学了个很好的dp模型 ...

  6. Storm 流式计算框架

    1. 简介 是一个分布式, 高容错的 实时计算框架 Storm进程常驻内存, 永久运行 Storm数据不经过磁盘, 在内存中流转, 通过网络直接发送给下游 流式处理(streaming) 与 批处理( ...

  7. java高并发核心类 AQS(Abstract Queued Synchronizer)抽象队列同步器

    什么是AQS? 全称: Abstract Queued Synchronizer: 抽象队列同步器 是 java.util.concurrent.locks包下的一个抽象类 其编写者: Doug Le ...

  8. 实验吧-隐写术-男神一般都很低调很低调的!!(stegsolve->Image Combiner + DES加密)

    先介绍一下DES加密:(也可参考https://blog.csdn.net/zz_Caleb/article/details/87016017,第14个) 1)对称加密,参考:对称加密和非对称加密 2 ...

  9. Django template配置

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...

  10. 实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题

    实战 迁移学习 VGG19.ResNet50.InceptionV3 实践 猫狗大战 问题   参考博客:::https://blog.csdn.net/pengdali/article/detail ...