



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!