Delphi acoplando java deflate compresión y descompresión

Recientemente, descargué una factura de un banco. La interfaz de la factura se desarrolló en Java y se comprimió con deflate.

Cuando se utiliza Delphi para descomprimir, la versión Delphi XE actualmente admite la descompresión directa por desinflado:

Consulta el documento oficial.

Descripción

Este ejemplo muestra el uso de TZCompressionStream y TZDecompressionStream. Proporcione los dos nombres de archivo en los controles de Edición del formulario principal y luego presione el botón Comprimir o Descomprimir para realizar las acciones. Cuando se presiona el botón Comprimir, la extensión '.zip' se agrega automáticamente al archivo de salida. Cuando se presiona el botón Descomprimir, '.zip' se elimina automáticamente.

Código

procedure TForm1.btnCompressClick(Sender: TObject);
var
  LInput, LOutput: TFileStream;
  LZip: TZCompressionStream;

begin
  { Create the Input, Output, and Compressed streams. }
  LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
  LOutput := TFileStream.Create(Edit2.Text + '.zip', fmCreate);
  LZip := TZCompressionStream.Create(clDefault, LOutput);

  { Compress data. }
  LZip.CopyFrom(LInput, LInput.Size);

  { Free the streams. }
  LZip.Free;
  LInput.Free;
  LOutput.Free;
end;

procedure TForm1.btnDecompressClick(Sender: TObject);
var
  LInput, LOutput: TFileStream;
  LUnZip: TZDecompressionStream;

begin
  { Create the Input, Output, and Decompressed streams. }
  LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
  LOutput := TFileStream.Create(ChangeFileExt(Edit1.Text, 'txt'), fmCreate);
  LUnZip := TZDecompressionStream.Create(LInput);

  { Decompress data. }
  LOutput.CopyFrom(LUnZip, 0);

  { Free the streams. }
  LUnZip.Free;
  LInput.Free;
  LOutput.Free;
end;

También puede realizar compresión y descompresión desinflada en la cuerda con una pequeña modificación.


function DEZIP(INSTR: string): string;
var
  LOutput: TFileStream;
  LUnZip: TZDecompressionStream;
  Buf,BufBack: TBytes;
  strMem,astream:TMemoryStream ;

begin

  try
    Result := '';
    strMem := TMemoryStream.Create;
    astream := TMemoryStream.Create;
    Buf := TNetEncoding.Base64.DecodeStringToBytes(INSTR);
    astream.Position := 0;
    astream.Write(Buf,Length(buf));
    astream.Position := 0;
      { Create the Input, Output, and Decompressed streams. }
    LOutput := TFileStream.Create('zhangdan.txt', fmCreate);
    LUnZip := TZDecompressionStream.Create(astream);

    { Decompress data. }
    LOutput.CopyFrom(LUnZip, 0);
    strMem.CopyFrom(LUnZip,0);
    SetLength(BufBack,strMem.Size);
    strMem.Position := 0;

    strMem.ReadData(BufBack,Length(BufBack));
    Result := TEncoding.UTF8.GetString(BufBack);


  finally

  { Free the streams. }
    LUnZip.Free;
   FreeAndNil( strMem );
    FreeAndNil( astream );

    LOutput.Free;
  end;

end;

Supongo que te gusta

Origin blog.csdn.net/fyq158797/article/details/131554916
Recomendado
Clasificación