DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Rotinas de compressão de descompressão de strings utilizando Delphi

Nesta dica são exibidas funções de compressão de descompressão de strings
utilizando a biblioteca zlib;

Código escrito por Yanniel e ao final do post, tem a referencia
para o post original em inglês.

Funcões:
ZCompressString para comprimir
ZDecompressString para descomprimir

Vamos ao código!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
.........................
implementation
 
uses
  ZLib;
 
function ZCompressString(aText: string; aCompressionLevel: TZCompressionLevel): string;
var
  strInput,
  strOutput: TStringStream;
  Zipper: TZCompressionStream;
begin
  Result:= ''; 
  strInput:= TStringStream.Create(aText);
  strOutput:= TStringStream.Create;
  try
    Zipper:= TZCompressionStream.Create(strOutput, aCompressionLevel);
    try
      Zipper.CopyFrom(strInput, strInput.Size);
    finally
      Zipper.Free;
    end;
    Result:= strOutput.DataString;
  finally
    strInput.Free;
    strOutput.Free;
  end;
end;
 
function ZDecompressString(aText: string): string;
var
  strInput,
  strOutput: TStringStream;
  Unzipper: TZDecompressionStream;
begin
  Result:= ''; 
  strInput:= TStringStream.Create(aText);
  strOutput:= TStringStream.Create;
  try
    Unzipper:= TZDecompressionStream.Create(strInput);
    try
      strOutput.CopyFrom(Unzipper, Unzipper.Size);
    finally
      Unzipper.Free;
    end;
    Result:= strOutput.DataString;
  finally
    strInput.Free;
    strOutput.Free;
  end;
end;
.........................

A principal vantagem das funções acima ( ZCompressStr e ZDecompressStr ) juntamente com o uso
do ZLib.pas é que você não terá potencial perda de dados ao manipular conversõe Unicode <-> Ansi.

Em outras palavras, as funções acima funcionarão nas versões
Ansi Delphi (anterior ao Delphi 2009) e
Unicode Delphi (Delphi 2009, 2010, XE e assim por diante).

Observe que você precisa incluir o ZLib na cláusula uses.

O ZLib.pas é um wrapper de alto nível para a biblioteca ZLib
criada por Jean-Loup Gailly e Mark Adle para compactação de dados.

Além disso, utilizando as classes TZCompressionStream e TZDecompressionStream
você também pode compactar e descompactar arquivos ZIP .

A aplicabilidade para compactação de dados é realmente ampla!

Um exemplo da vida real?

Yanniel precisava armazenar strings JSON em um banco de dados MySQL.

Como forma de otimizar recursos, ele compactava todas as strings JSON antes da inserção no banco de dados.
Após a recuperação, ele conseguiu descomprimir cada string para o seu valor original.

A taxa de compressão foi enorme: Yanniel coloqueu ~ 9000 caracteres em ~ 300 por JSON, em média.
Essa é uma economia considerável: A tabela contém mais de um milhão de linhas. Faça as contas você mesmo! 🙂

Fonte do post original em inglês: http://www.yanniel.info/2011/01/string-compress-decompress-delphi-zlib.html

Dúvidas ou sugestões? Deixe o seu comentário!

Facebook Comments Box
  • Giovani Da Cruz
  • 6.098 views
  • 0 comentários
  • 24 de março de 2019

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados