12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.IO.Compression;
- using System.Text;
- using System.Threading.Tasks;
- namespace EdjCase.JsonRpc.Core.Tools
- {
- public interface IStreamCompressor
- {
- void Compress(Stream inputStream, Stream outputStream, CompressionType compressionType);
- void Decompress(Stream inputStream, Stream outputStream, CompressionType compressionType);
- }
- public class DefaultStreamCompressor : IStreamCompressor
- {
- /// <summary>
- /// Decompresses the input stream to the output stream.
- /// </summary>
- /// <param name="inputStream">The input stream to decompress.</param>
- /// <param name="inputStream">The output stream to write to.</param>
- /// <param name="compressionType">Type of the compression.</param>
- /// <returns></returns>
- public void Decompress(Stream inputStream, Stream outputStream, CompressionType compressionType)
- {
- Stream compressionStream = null;
- try
- {
- switch (compressionType)
- {
- case CompressionType.Gzip:
- compressionStream = new GZipStream(inputStream, CompressionMode.Decompress, leaveOpen: true);
- break;
- case CompressionType.Deflate:
- compressionStream = new DeflateStream(inputStream, CompressionMode.Decompress, leaveOpen: true);
- break;
- default:
- throw new ArgumentOutOfRangeException(nameof(compressionType), compressionType, null);
- }
- compressionStream.CopyTo(outputStream);
- outputStream.Position = 0;
- }
- finally
- {
- compressionStream?.Dispose();
- }
- }
- /// <summary>
- /// Compresses the input stream to the output stream.
- /// </summary>
- /// <param name="inputStream">The input stream to compress.</param>
- /// <param name="inputStream">The output stream to write to.</param>
- /// <param name="compressionType">Type of the compression.</param>
- /// <returns></returns>
- public void Compress(Stream inputStream, Stream outputStream, CompressionType compressionType)
- {
- long intialPosition = inputStream.Position;
- Stream compressionStream = null;
- try
- {
- compressionStream = new DeflateStream(outputStream, CompressionMode.Compress, leaveOpen: true);
- //switch (compressionType)
- //{
- // case CompressionType.Gzip:
- // compressionStream = new GZipStream(outputStream, CompressionMode.Compress, leaveOpen: true);
- // break;
- // case CompressionType.Deflate:
- // compressionStream = new DeflateStream(outputStream, CompressionMode.Compress, leaveOpen: true);
- // break;
- // default:
- // throw new ArgumentOutOfRangeException(nameof(compressionType), compressionType, null);
- //}
-
- inputStream.CopyTo(compressionStream);
- }
- catch(Exception e) {
- Console.WriteLine(e.StackTrace);
- }
- finally
- {
- //compressionStream?.Dispose();
- inputStream.Position = intialPosition;
- }
- }
- }
- }
|