1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.IO;
- using System.IO.Compression;
- using System.Text;
- namespace FastReport.Utils
- {
- internal static class Compressor
- {
- public static Stream Decompress(Stream source, bool bidiStream)
- {
- if (IsStreamCompressed(source))
- {
- if (bidiStream)
- {
- // create bidirectional stream
- Stream stream = new MemoryStream();
- using (GZipStream gzip = new GZipStream(source, CompressionMode.Decompress))
- {
- const int BUFFER_SIZE = 4096;
- gzip.CopyTo(stream, BUFFER_SIZE);
- }
- stream.Position = 0;
- return stream;
- }
- else
- return new GZipStream(source, CompressionMode.Decompress);
- }
- return null;
- }
- public static Stream Compress(Stream dest)
- {
- return new GZipStream(dest, CompressionMode.Compress, true);
- }
- public static byte[] Compress(byte[] buffer)
- {
- using (MemoryStream dest = new MemoryStream())
- {
- using (Stream gzipStream = new GZipStream(dest, CompressionMode.Compress, true))
- {
- gzipStream.Write(buffer, 0, buffer.Length);
- }
- return dest.ToArray();
- }
- }
- public static string Compress(string source)
- {
- byte[] srcBytes = Encoding.UTF8.GetBytes(source);
- byte[] compressedBytes = Compress(srcBytes);
- return Convert.ToBase64String(compressedBytes);
- }
- public static byte[] Decompress(byte[] buffer)
- {
- using (MemoryStream ms = new MemoryStream(buffer))
- {
- if (IsStreamCompressed(ms))
- {
- using (MemoryStream uncompressedStream = Compressor.Decompress(ms, true) as MemoryStream)
- {
- return uncompressedStream.ToArray();
- }
- }
- else
- {
- return buffer;
- }
- }
- }
- public static string Decompress(string source)
- {
- byte[] srcBytes = Convert.FromBase64String(source);
- byte[] decompressedBytes = Compressor.Decompress(srcBytes);
- return Encoding.UTF8.GetString(decompressedBytes);
- }
- public static bool IsStreamCompressed(Stream stream)
- {
- int byte1 = stream.ReadByte();
- int byte2 = stream.ReadByte();
- stream.Position -= 2;
- return byte1 == 0x1F && byte2 == 0x8B;
- }
- }
- }
|