zoukankan      html  css  js  c++  java
  • Delphi中流的使用:压缩与解压缩(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.
    

            摘自万一老师的博客:http://www.cnblogs.com/del/archive/2008/01/01/1022539.html

  • 相关阅读:
    外面下雨了,凉快了
    无聊,听说wow五区开放了,注册个人物去玩玩
    草原游记二大青山上
    终于拿到钥匙了
    刚看到一个论坛的帖子,一位大哥说到真是话糙理不糙,佩服
    草原随感录武川印象
    第一次网上买点卡
    看到小说<搜神新记>里面巨搞笑的一段,是共工和太章打完架后,把事先被昏迷的人叫醒的事情
    昨天晚上很生气很生气。。。。
    感于"一生所爱"
  • 原文地址:https://www.cnblogs.com/bingege/p/1725877.html
Copyright © 2011-2022 走看看