procedure CompressFile(FileName:string;Extension:String; 
  const CompressionLevel: TCompressionLevel); 
var 
  SrcStream :TFileStream; 
  TmpStream :TMemoryStream; 
  DstStream :TFileStream; 
  CompStream :TCompressionStream; 
  Buffer :PChar; 
  rSize,CompSize :Integer; 
begin 
  if not FileExists(FileName) then 
    raise Exception.Create(MyRs_NotFindFile);                  //读取这个文件,没有则调用错误类 
  SrcStream := TFileStream.Create(FileName,fmOpenRead);        //创建SrcStream 的文件流 ,用于 
  TmpStream := TMemoryStream.Create;                          // 创建TmpStream 的内存流 
  DstStream := TFileStream.Create(ChangeFileExt(FileName,Extension),fmCreate);    //将建.xxm的文件 
  GetMem(Buffer,BlockNum*B); 
  try 
    rSize := SrcStream.Read(Buffer^,BlockNum*B); 
    while rSize > 0 do 
    begin 
      CompStream := TCompressionStream.Create(CompressionLevel,TmpStream); 
      try 
        CompStream.WriteBuffer(Buffer^,rSize); 
      finally 
        CompStream.Free; 
      end; 
        CompSize := TmpStream.Size; 
        DstStream.Write(rSize,SizeOf(rSize)); 
        DstStream.Write(CompSize,SizeOf(CompSize)); 
        DstStream.CopyFrom(TmpStream,0); 
        TmpStream.Clear; 
        rSize := SrcStream.Read(Buffer^,B*BlockNum); 
    end; 
  finally 
    DstStream.Free; 
    TmpStream.Free; 
    SrcStream.Free; 
    FreeMem(Buffer); 
  end; 
end;能不能解释一下这个压缩算法,并给出解压的代码