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. 123.ModelForm的使用

    ModelForm 在我们的实例中,需要通过models.py中定义相关的模型字段,之后在forms.py中同样需要定义每个字段进行相应的验证,这样的话,我们会需要重复定义,这样的话,就相对比较麻烦, ...

  2. ip 在网络传输中是如何传递的

    前言 ip 我们知道有ip4与ip6.ip6还未实行,那么就暂且不谈. ip4我们在传递的时候一般是这样的"127.0.0.1",但是我们传输的是信号,也就是二进制数据,这个字符如 ...

  3. ORACLE添加新用户并配置权限 添加其他用户的表权限

    添加用户配置权限 1.查出表空间所在位置 ,file_name from dba_data_files order by file_id; 2.根据步骤1查出的路径.将路径替换掉并指定用户名 路径:D ...

  4. 使用Indy解决Could not load SSL Library错误

    测试平台:DelphiXE7 + Indy 10.6.0.5169 + Win7 64bit 步骤: 1. SSL下载版本:openssl-1.0.1j-i386-win32 可去http://yun ...

  5. 开源免费的安卓投屏工具-Scrcpy

    最近需要使用安卓投屏在桌面上操作,一开始使用Vysor,免费版画质无法直视,发现一个开源的工具,Scrcpy,貌似效果不错,但没有GUI,命令行安装,整起(Mac) 1.安装 homebrew: 通过 ...

  6. redis改配置

    命令行: 暂时生效,适合于做测试,或者线上马上服务修改,重启失效 CONFIG set stop-writes-on-bgsave-error no OK CONFIG get stop-writes ...

  7. Linux学习-预习第五六七章节关于用户权限管理以及磁盘文件系统

  8. windows中的运行命令

    首先按“开始”-“运行”,或按WIN键+R,进入『运行』窗口. 下面是常用的运行命令 (按英文字符顺序排列) appwize.cpl----添加.删除程序 access.cpl-----辅助功能选项 ...

  9. springboot启动时候的一个注意事项——不同包下有同样名字的class类

    springboot 在启动时候,常启动不起来,检查发现是不同包下面有同名的service和serviceImpl,按理说不同包下是可以有同名的类存在的,但是启动就是启动不了,报错说 org.spri ...

  10. node - 获取 token

     String(req.headers.authorization || '').split(' ').pop()