dicas show delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais
sombra
Artigos Show Delphi

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais
sombra
iniciantes show delphi

INICIANTES

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

Saiba mais
sombra
downloads show delphi

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
sombra
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!

  • Giovani Da Cruz
  • 0 comentários
  • 24 de março de 2019

Deixe um comentário

Ir ao topo

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