关于 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.
时间: 2024-10-25 22:36:05

关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)的相关文章

Linux系统压缩及解压缩

==============================================================================  Linux系统解压缩 ============================================================================== 概述: 本篇将介绍Linux系统中的压缩和解压缩的工具,以及归档工具(tar,cpio) compress/uncompress:对应 .Z 结尾的压缩格式文件

Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的repository,该分类下面有一个名为Jcompress的目录便是本文所述的压缩.解压缩小程序的源代码.后续会在Utility下面增加其他一些实用的小程序,比如基于socket的文件断点下载小程序等等.如果你读了此文觉得还不错,不防给笔者的github点个star, 哈哈.在正式介绍Jcompres

Linux学习笔记<十三>——文件压缩、解压缩和归档

压缩.解压缩命令: 1.compress/uncompress:压缩格式为Z,文件后缀为.Z compress /path/to/file uncompress /path/to/file.Z 2.gzip/gunzip/zcat:压缩格式为gz,文件后缀为.gz gzip [OPTION] /path/to/file:,压缩文件保存在被压缩文件的目录,压缩完成后会删除原文件 -v|verbose:显示指令执行过程 -d:解压缩,解压缩完成后删除原压缩文件 -#:1-9,指定压缩比,默认为6,数

《转》python的zipfile压缩、解压缩

网上搜索了很多关于python的zipfile压缩.解压缩.觉得讲述比较详细,例子也很明了.由于比较懒,就直接复制了. 以下内容大部分转于 http://blog.csdn.net/jgood/article/details/4351911 zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]) 创建一个Zi

Huffman的应用之文件压缩与解压缩

文件压缩与解压缩> 最近这段时间一直在学习树的这种数据结构,也接触到了Huffman树以及了解了什仫是Huffman编码,而我们常用的zip压缩也是利用的Huffman编码的特性,那仫是不是可以自己实现一个文件压缩呢?当然可以了.在文件压缩中我实现了Huffman树和建堆Heap的代码,zip压缩的介绍> http://www.cricode.com/3481.html 下面开始介绍自己实现的文件压缩的思路和问题... 1).统计>读取一个文件统计这个文件中字符出现的次数. 2).建树&

linux压缩、解压缩及归档工具

压缩.解压缩及归档工具 compress/uncompress: .Z    gzip/gunzip: .gz    bzip2/bunzip2: .bz2    xz/unxz: .xz    zip/unzip    tar, cpio 1.gzip/gunzip gzip [OPTION]... FILE ...            -d: 解压缩,相当于gunzip            -c: 将结果输出至标准输出:            -#:1-9,指定压缩比: zcat:不显式

tar的打包-压缩与解压缩,并解压到指定的目录

tar在linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数: -c :create 建立压缩档案的参数:-x : 解压缩压缩档案的参数:-z : 是否需用用gzip压缩:-v: 压缩的过程中显示档案:-f: 置顶文档名,在f后面立即接文件名,不能再加参数 举例: 一,将整个/home/www/images 目录下的文件全部打包为 /home/www/images.tar[[email protected] ~]# tar -cvf /home/ww

linux笔记 文件的压缩与解压缩gzip、bzip2、xz、zip&unzip、tar打包、tar打包和压缩并用

压缩文件意义节省网络传输带宽,降低磁盘使用率.但会使用一定的cpu. 1.gzip 不支持压缩目录,gzip后直接跟文件名,在当前目录下压缩时,原文件会消失. #gzip filename 指定压缩目录:#gzip -c 123.txt > /tmp/123.txt.gz 将当前目录下123.txt文件压缩到tmp目录下名字为123.txt.gz 解压缩:#gzip -d file.gz #zcat file.gz  查看.gz文件内容 2.bzip2 不支持压缩目录,bzip2后可直接跟文件名

day 2 压缩与解压缩命令 扩展.md

常用压缩格式:.zip .gz .bz2 常用压缩格式: .tar.gz .tar.bz2 zip 压缩文件名 源文件 压缩文件 zip -r 压缩文件名 源目录 压缩目录 .zip格式解压缩 unzip压缩文件 解压缩.zip文件 .gz格式压缩 .gzip 源文件 压缩为.gz格式对压缩文件,源文件会消失 gzip -c 源文件 >压缩文件 压缩为.gz格式,源文件保留 例如:gzip -c abc > abc.gz gzip -r 目录 压缩目录下所有的子文件,但是不能压缩目录 .gz格