{"id":6433,"date":"2018-01-16T12:33:09","date_gmt":"2018-01-16T14:33:09","guid":{"rendered":"http:\/\/gianfratti.com\/?p=6433"},"modified":"2018-01-16T12:43:01","modified_gmt":"2018-01-16T14:43:01","slug":"compactar-texto-em-base64","status":"publish","type":"post","link":"https:\/\/gianfratti.com\/index.php\/compactar-texto-em-base64\/","title":{"rendered":"Compactar texto em Base64 (GZipStream)"},"content":{"rendered":"<p>Recentemente precisava compactar um texto muito grande de forma simples e eficiente, o principal objetivo era diminuir o tamanho do texto de 145kb, n\u00e3o salvando arquivos no disco, apenas compactar de um lado e descompactar do outro lado, sem gera\u00e7\u00e3o de arquivos fisicos, nesse momento lembrei do <strong>GZipStream<\/strong>, ap\u00f3s realizar algumas implementa\u00e7\u00f5es e testes consegui deixar o texto com 5kb, objetivo alcan\u00e7ado, existem outras formas de compacta\u00e7\u00e3o e at\u00e9 mesmo pelo IIS, mas no cen\u00e1rio proposto tivemos sucesso.<!--more--><\/p>\n<p>Segue abaixo a implementa\u00e7\u00e3o:<\/p>\n<p>Exemplo da chamada:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n\r\nstring textoCompactado = CompressUtil.Compress(&quot;Fabrizio Gianfratti Manes&quot;);\r\nstring textoDesCompactado = CompressUtil.DecompressText(textoCompactado);\r\n\r\n<\/pre>\n<p>Implementa\u00e7\u00e3o da classe:<br \/>\nObs: inserir a referencia: using System.IO.Compression;<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\npublic class CompressUtil\r\n{\r\n\/\/\/ &lt;summary&gt; Compacta uma string &lt;\/summary&gt;\r\n\/\/\/ &lt;param name=\u201dinputText\u201d&gt; Texto de entrada &lt;\/param&gt;\r\n\/\/\/ &lt;returns&gt; Texto compactado Base64 encoded &lt;\/returns&gt;\r\npublic static string Compress(string inputText)\r\n{\r\nreturn Compress(System.Text.Encoding.UTF8.GetBytes(inputText));\r\n}\r\n\r\n\/\/\/ &lt;summary&gt; Compacta uma string &lt;\/summary&gt;\r\n\/\/\/ &lt;param name=\u201dinputBytes\u201d&gt; Texto de entrada &lt;\/param&gt;\r\n\/\/\/ &lt;returns&gt; Texto compactado Base64 encoded &lt;\/returns&gt;\r\npublic static string Compress(byte&#x5B;] inputBytes)\r\n{\r\nbyte&#x5B;] compressed;\r\n\r\nusing (MemoryStream ms = new MemoryStream())\r\n{\r\nusing (GZipStream zip = new GZipStream(ms, CompressionMode.Compress))\r\n{\r\nzip.Write(inputBytes, 0, inputBytes.Length);\r\nzip.Close();\r\n\r\ncompressed = ms.ToArray();\r\n}\r\n}\r\n\r\nreturn Convert.ToBase64String(compressed);\r\n}\r\n\r\n\/\/\/ &lt;summary&gt; Descompacta uma string. &lt;\/summary&gt;\r\n\/\/\/ &lt;param name=\u201dcompressedText\u201d&gt; Texto compactado Base64 encoded &lt;\/param&gt;\r\n\/\/\/ &lt;returns&gt; descompacta um texto &lt;\/returns&gt;\r\npublic static string DecompressText(string compressedText)\r\n{\r\nreturn System.Text.Encoding.UTF8.GetString(DecompressBytes(compressedText));\r\n}\r\n\r\n\/\/\/ &lt;summary&gt; Descompacta uma string &lt;\/summary&gt;\r\n\/\/\/ &lt;param name=\u201dcompressedText\u201d&gt; Texto compactado Base64 encoded &lt;\/param&gt;\r\n\/\/\/ &lt;returns&gt; descompacta byte array &lt;\/returns&gt;\r\npublic static byte&#x5B;] DecompressBytes(string compressedText)\r\n{\r\nbyte&#x5B;] bytes = Convert.FromBase64String(compressedText);\r\nbyte&#x5B;] outputBytes;\r\n\r\nusing (MemoryStream inputStream = new MemoryStream(bytes))\r\n{\r\nusing (GZipStream zip = new GZipStream(inputStream, CompressionMode.Decompress))\r\n{\r\nusing (MemoryStream outputStream = new MemoryStream())\r\n{\r\nzip.CopyTo(outputStream);\r\n\r\noutputBytes = outputStream.ToArray();\r\n}\r\n}\r\n}\r\n\r\nreturn outputBytes;\r\n}\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Recentemente precisava compactar um texto muito grande de forma simples e eficiente, o principal objetivo era diminuir o tamanho do texto de 145kb, n\u00e3o salvando arquivos no disco, apenas compactar de um lado e descompactar do outro lado, sem gera\u00e7\u00e3o de arquivos fisicos, nesse momento lembrei do GZipStream, ap\u00f3s realizar algumas implementa\u00e7\u00f5es e testes consegui <span class=\"ellipsis\">&hellip;<\/span> <span class=\"more-link-wrap\"><a href=\"https:\/\/gianfratti.com\/index.php\/compactar-texto-em-base64\/\" class=\"more-link\"><span>Read More &rarr;<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[221,220,223,222],"class_list":["post-6433","post","type-post","status-publish","format-standard","hentry","category-net-framework","tag-compactacao","tag-compactar","tag-gzipstream","tag-memorystream"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/6433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/comments?post=6433"}],"version-history":[{"count":8,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/6433\/revisions"}],"predecessor-version":[{"id":6443,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/6433\/revisions\/6443"}],"wp:attachment":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/media?parent=6433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/categories?post=6433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/tags?post=6433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}