zoukankan      html  css  js  c++  java
  • 关于 Delphi 中流的使用(8) 压缩与解压缩的函数

    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;
    
    //压缩函数
    procedure Zip(var fs: TMemoryStream);
    var
      cs: TCompressionStream;
      ms: TMemoryStream;
      num: Integer;
    begin
      if not(Assigned(fs) and (fs.Size>0)) then Exit;
    
        num := fs.Size;
        ms := TMemoryStream.Create;
        cs := TCompressionStream.Create(clMax, ms);
      try
        fs.SaveToStream(cs);
        cs.Free;
        //ms.Position := 0;
        fs.Clear;
        fs.WriteBuffer(num, sizeof(num));
        fs.CopyFrom(ms, 0);
      finally
        ms.Free;
      end;
    end;
    
    //解压函数
    procedure UnZip(var fs: Tmemorystream);
    var
      ds: TDecompressionStream;
      ms: TMemoryStream;
      num: Integer;
    begin
      if not(Assigned(fs) and (fs.Size>0)) then Exit;
    
      fs.Position := 0;
      fs.ReadBuffer(num,sizeof(num));
      ms := TMemoryStream.Create;
      ds := TDecompressionStream.Create(fs);
      try
        ms.SetSize(num);
        ds.Read(ms.Memory^, num);
        //ms.Position := 0;
        fs.Clear;
        fs.CopyFrom(ms, 0);
      finally
        ds.Free;
        ms.Free;
      end;
    end;
    
    
    //压缩测试
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ms: TMemoryStream;
    begin
      ms := TMemoryStream.Create;
      ms.LoadFromFile('c:\temp\test.txt');
      Zip(ms);
      ms.SaveToFile('c:\temp\test.zipx');
    end;
    
    //解压测试
    procedure TForm1.Button2Click(Sender: TObject);
    var
      ms: TMemoryStream;
    begin
      ms := TMemoryStream.Create;
      ms.LoadFromFile('c:\temp\test.zipx');
      UnZip(ms);
      ms.SaveToFile('c:\temp\test2.txt');
    end;
    
    end.
    
  • 相关阅读:
    第五十六课 树中结点的删除操作
    第五十五课 树中节点的清除操作
    常用的机器学习&数据挖掘知识点总结
    leetcode 211. Add and Search Word
    leetcode 349. Intersection of Two Arrays
    leetcode 659. Split Array into Consecutive Subsequences
    leetcode 658. Find K Closest Elements
    leetcode 657. Judge Route Circle
    leetcode 179. Largest Number
    leetcode 660. Remove 9
  • 原文地址:https://www.cnblogs.com/del/p/1023195.html
Copyright © 2011-2022 走看看