Caminhoneiro

CompressingInMemoryStreams

Jul 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.67 KB | None | 0 0
  1. using System.IO;
  2. using System.IO.Compression;
  3. using System.Text;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5.  
  6. namespace Demos
  7. {
  8.     [TestClass]
  9.     public class CompressingInMemoryStreams
  10.     {
  11.         [TestMethod]
  12.         public void Example()
  13.         {
  14.             const string originalString = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce dignissim vitae nulla a vehicula. Quisque ut diam suscipit, accumsan turpis ac, feugiat lorem. Nam malesuada consequat mi, vitae vulputate diam gravida quis. Aenean a neque aliquet, luctus quam vel, mattis massa. Pellentesque placerat nec sapien quis lacinia. Sed non dui vel sapien tempus laoreet ut vel ligula. Donec mattis semper erat, porttitor facilisis tortor aliquet non.
  15.                                         Proin vitae sollicitudin lorem, fermentum convallis risus. Aliquam tellus risus, porta id interdum ac, tincidunt nec nisl. Nulla in blandit nulla, bibendum volutpat eros. Praesent tincidunt risus nec venenatis vehicula. Praesent urna odio, tempor quis justo sed, semper auctor nisi. Nulla auctor blandit mauris sit amet varius. Cras suscipit fermentum libero ac dictum. Donec vulputate eros elementum tincidunt dapibus. Fusce eget elit quam. Vestibulum ut porta ante. Mauris quis sapien vitae nulla mattis dapibus. Curabitur cursus odio sit amet tellus iaculis faucibus. Nunc sed eleifend velit, eget tincidunt orci. Curabitur ornare felis id dolor porta interdum eget a nisi. Nam ut adipiscing dui. Duis eu sapien nisl.
  16.                                         Maecenas vulputate cursus nulla et commodo. Morbi a rhoncus tellus. Ut hendrerit quis augue ultricies eleifend. Phasellus a feugiat urna, sed mattis lorem. Sed in rutrum sem. Praesent fermentum est erat. Etiam luctus velit a nulla semper interdum.
  17.                                         Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque magna neque, lacinia sit amet consectetur non, viverra vel ligula. Phasellus accumsan quis metus accumsan aliquam. Nam posuere lorem ligula, eu mattis enim mollis non. In hac habitasse platea dictumst. Integer tristique malesuada urna at fermentum. In eget pretium massa. Donec magna nisl, suscipit ut viverra a, vehicula eu nulla. In auctor lobortis aliquam. Vestibulum adipiscing est in mi tristique, nec aliquet elit vulputate. Etiam sollicitudin malesuada semper.
  18.                                         Sed ornare, enim ut luctus cursus, mauris ligula semper libero, sed suscipit nisi lectus quis mi. Suspendisse et auctor odio. Proin vestibulum molestie ligula, ut dapibus quam euismod id. Donec consequat purus nec tellus vulputate sagittis. Nunc eu justo in elit commodo tincidunt sit amet eu erat. Vestibulum sed lacinia magna. Duis faucibus scelerisque sapien, non vulputate augue dignissim condimentum. Fusce gravida elementum cursus. Maecenas imperdiet, nulla sagittis bibendum aliquam, velit risus pharetra erat, vel adipiscing neque magna at erat";
  19.  
  20.             var originalBytes = Encoding.ASCII.GetBytes(originalString);
  21.            
  22.  
  23.             // compress
  24.             var compressedBytes = Compress(originalBytes);
  25.  
  26.             var originalSize = originalBytes.Length;
  27.             var compressedSize = compressedBytes.Length;
  28.             var sizeDifference = originalSize - compressedSize;
  29.  
  30.  
  31.             // decompress
  32.             var decompressedBytes = Decompress(compressedBytes);
  33.            
  34.             var decompressedString = Encoding.ASCII.GetString(decompressedBytes);            
  35.             var isSameString = originalString == decompressedString;
  36.         }
  37.  
  38.    
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.         private byte[] Compress(byte[] originalBytes)
  47.         {
  48.             var compressIntoMs = new MemoryStream();
  49.  
  50.             using (var gzs = new GZipStream(compressIntoMs, CompressionMode.Compress))
  51.             {
  52.                 gzs.Write(originalBytes, 0, originalBytes.Length);
  53.             }
  54.  
  55.             // at this point, the compressIntoMs memory stream is now closed
  56.  
  57.             var compressedBytes = compressIntoMs.ToArray();
  58.  
  59.             return compressedBytes;
  60.         }
  61.  
  62.  
  63.  
  64.  
  65.  
  66.         private byte[] Decompress(byte[] compressedBytes)
  67.         {
  68.             var memoryStreamOfCompressedBytes = new MemoryStream(compressedBytes);
  69.  
  70.             using (var decompressIntoMs = new MemoryStream())
  71.             using (var gzs = new GZipStream(memoryStreamOfCompressedBytes,
  72.                                             CompressionMode.Decompress))
  73.             {
  74.                 gzs.CopyTo(decompressIntoMs);
  75.  
  76.                 var decompressedBytes = decompressIntoMs.ToArray();
  77.  
  78.                 return decompressedBytes;
  79.             }
  80.         }
  81.     }  
  82. }
Add Comment
Please, Sign In to add comment