public static List <CompressedResult> Compress(List <CompressionMethod> methods, string str)
        {
            var output = new List <CompressedResult>();

            byte[] dataBytes = encoder.GetBytes(str);


            foreach (var method in methods)
            {
                byte [] compressedData = Converter.StringToBytes("");

                switch (method)
                {
                case CompressionMethod.GZip:

                    compressedData = GZip.Compress(dataBytes);

                    break;

                case CompressionMethod.LZ77:

                    compressedData = LZ77.Compress(dataBytes);

                    break;

                default: break;
                }

                var result = new CompressedResult();
                result.bytes        = compressedData;
                result.base64String = Convert.ToBase64String(compressedData);
                result.method       = method;

                output.Add(result);
            }

            return(output);
        }
        public static List <DecompressedResult> Decompress(List <CompressedResult> compressedResults)
        {
            var output = new List <DecompressedResult>();

            foreach (var item in compressedResults)
            {
                CompressedResult compressedResult = item;
                byte[]           dataBytes        = Convert.FromBase64String(compressedResult.base64String);
                byte[]           decompressedData = Converter.StringToBytes("");

                switch (compressedResult.method)
                {
                case CompressionMethod.GZip:

                    decompressedData = GZip.Decompress(dataBytes);

                    break;

                case CompressionMethod.LZ77:

                    decompressedData = LZ77.Decompress(dataBytes);

                    break;

                default: break;
                }

                var result = new DecompressedResult();
                result.bytes = decompressedData;
                result.decompressedString = Converter.BytesToString(decompressedData);
                result.method             = compressedResult.method;

                output.Add(result);
            }

            return(output);
        }