流压缩 解压 Zlib

procedure TForm1.Button3Click(Sender: TObject);

var

  beforeMS,afterMS:TMemoryStream;  {beforeMS 是要压缩的流; afterMS 是接收压缩后文件的流}

  cS:TCompressionStream;   {定义压缩流}

  num:Integer;             {原始文件大小}

begin

  {第一步: 调入要压缩的文件, 并获取大小}

  beforeMS:=TMemoryStream.Create;

  beforeMS.LoadFromFile('F:\cc.doc');

  num:=beforeMS.Size;



  {第二步: 建立接收的流, 并先写入原始文件大小}

  afterMS:=TMemoryStream.Create;

  afterMS.Write(num,SizeOf(num));



  {第三步: 压缩}

  cS:=TCompressionStream.Create(clMax,afterMS); {参数1是压缩比; 参数2是接收流}

  beforeMS.SaveToStream(cS);  {传入要压缩的数据}

  cS.Free;   {压缩流 Free 后才真正完成压缩, 所以提前 Free}



  {第四步: 保存}

  afterMS.SaveToFile('F:\cc.press');



  {第五步: 释放}

  beforeMS.Free;

  afterMS.Free;

end;



procedure TForm1.Button4Click(Sender: TObject);

var

  souMS,desMS:TMemoryStream;

  dS:TDecompressionStream;

  num:Integer;

begin

  {第一步: 准要解压的文件}

  souMS:=TMemoryStream.Create;

  souMS.LoadFromFile('F:\cc.press');



  {第二步: 读出文件压缩前的大小}

  souMS.Position := 0;

  souMS.ReadBuffer(num,SizeOf(num));



  {第三步: 准备好要接收的流, 并设置需要的大小}

  desMS:=TMemoryStream.Create;

  desMS.SetSize(num);



  {第四步: 解压}

  dS:=TDecompressionStream.Create(souMS);  {参数是要解压的流}



  {第五步: 把解压后的数据读出存放到已准备好接收的流}

  dS.Read(desMS.Memory^,num);

  dS.Free;



  {第六步: 保存}

  desMS.SaveToFile('F:\jy.doc');



  desMS.Free;

  souMS.Free;

end;

 

你可能感兴趣的:(lib)