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 := ;
  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)的更多相关文章

  1. Java 基础【12】 压缩与解压缩

    Java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类. 还包括使用 DEFLATE 压缩算法(用于 ZIP 和 GZIP 文件格式)对数据进行压缩和解压缩的类. 依赖 Jd ...

  2. 菜鸟学Linux命令:tar命令 压缩与解压缩

    tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件. tar最初被用来在磁带上创建档案,现在,用户可以 ...

  3. Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控

    一.正文处理,压缩与解压缩 1.内容重定向>与>> >:覆盖,将>号左边的结果覆盖到>号右边的文件中,如果文件不存在,则先创建一个新的空文件并覆盖 >> ...

  4. gzip [选项] 压缩(解压缩)

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. 语法:gzip ...

  5. 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩

    使用开源类库ICSharpCode.SharpZipLib.Zip可以实现压缩与解压缩功能,源代码和DLL可以从http://www.icsharpcode.net/OpenSource/SharpZ ...

  6. PclZip:强大的PHP压缩与解压缩zip类

    PclZip简介PclZip是一个很强大的压缩与解压缩zip文件的PHP类,PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip.PKZIP):且能对此类类档案进行处理,包括产 ...

  7. zip格式压缩、解压缩(C#)

    压缩方法 #region 压缩 /// <summary> /// 压缩 /// </summary> /// <param name="bytes" ...

  8. Tar打包、压缩与解压缩到指定目录的方法

    tar在linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数: -c :create 建立压缩档案的参数: -x : 解压缩压缩档案的参数: -z : 是 ...

  9. Deflater与Inflater的压缩与解压缩

    原文:Deflater与Inflater的压缩与解压缩 package util; import java.util.Arrays; import java.util.zip.Deflater; im ...

随机推荐

  1. hdu 3579(中国剩余定理+考虑0)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. ansible 文件和目录操作

    ansible file 模块参考: refer to https://docs.ansible.com/ansible/latest/modules/file_module.html?highlig ...

  3. Java原子操作类,你知道多少?

    原子操作类简介 由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案. 实际上,在J.U.C下的atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去 更新基 ...

  4. saltstack安装+基本命令

    环境: node1:172.16.1.60 OS:centos 7.3 master hostname:centos7u3-1 node2:172.16.1.61 OS:centos 7.3 mini ...

  5. Ubuntu 16.04下IntelliJ IDEA菜单显示乱码的问题解决

    说明:这个问题一般是Ubuntu安装时默认使用了中文,而IDEA默认是以系统默认字体为主,所以就会出现乱码:要解决这种问题,就是在IDEA启动时强制设置为英文. 解决方式: 在idea.vmoptio ...

  6. GLSL逐像素光照 【转】

    转载:http://blog.csdn.net/hgl868/article/details/7872414 逐像素的方向光(Directional Light per Pixel) 这一节将把前面的 ...

  7. yii2操作数据库 mysql 读写分离 主从复制

    转载地址:http://www.kuitao8.com/20150115/3471.shtml 开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的&quo ...

  8. 2017.2.21 activiti实战--第七章--Activiti与spring集成(一)配置文件

    学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 ...

  9. script脚本中写不写$(document).ready(function() {});的差别

    $(document).ready() 里的代码是在页面内容都载入完才运行的,假设把代码直接写到script标签里.当页面载入完这个script标签就会运行里边的代码了,此时假设你标签里运行的代码调用 ...

  10. remove-duplicates-from-sorted-array-ii——去除重复

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...