public static string DecompressStrings(string data, Encoding encoding)
        {
            data.AssertHasText(nameof(data));
            encoding = encoding ?? Encoding.UTF8;
            byte[] inputData = encoding.GetBytes(data);

            LZ77 lz = new LZ77();

            byte[] decompressed = lz.Decompress(inputData);
            return(encoding.GetString(decompressed));
        }
        public static string CompressStrings(string data, Encoding encoding = null, int windowLength = -1)
        {
            data.AssertHasText(nameof(data));
            encoding = encoding ?? Encoding.UTF8;
            byte[] inputData = encoding.GetBytes(data);

            LZ77 lz = new LZ77();

            byte[] compressed = lz.Compress(inputData, windowLength);
            return(encoding.GetString(compressed));
        }
        public static byte[] DecompressBytes(byte[] data)
        {
            LZ77 lz = new LZ77();

            return(lz.Decompress(data));
        }
        public static byte[] CompressBytes(byte[] data, int windowLength = -1)
        {
            LZ77 lz = new LZ77();

            return(lz.Compress(data, windowLength));
        }