Exemple #1
0
        public void HuffmanCompression()
        {
            var compressor = new HuffmanCompressionProcessor();

            const string input = "cabacabaababbababcacacacaedfghijklmnopqrstuvwxyz"
                                 + "Adsasd131221453!~[]{}{}~~`\'\\!@#$%^&*()_+=90klasdmnvzxcciuhakdkasdfioads"
                                 + "ADBSADLGUCJNZCXNJSLKDGYSADHIASDMNKJLDBOCXBVCXJIMSAD<NSKLDBHCBIUXHCXZNCMSN"
                                 + ",<>?|";

            var inputBytes = Encoding.UTF8.GetBytes(input);

            var now = DateTime.Now.Millisecond;

            var compressed   = compressor.Compress(inputBytes);
            var decompressed = compressor.Decompress(compressed);

            var newNow = DateTime.Now.Millisecond;

            var output = Encoding.UTF8.GetString(decompressed);

            Assert.Equal(input, output);

            Console.WriteLine("Compress/decompress time: " + (newNow - now));
            Console.WriteLine("Input length: " + input.Length);
        }
Exemple #2
0
        private byte[] EncodeString(string item, bool useHuffman)
        {
            byte[] itemBts;
            int    len;

            const byte prefix = 7;

            byte[] lenBts;

            if (!useHuffman)
            {
                itemBts = Encoding.UTF8.GetBytes(item);
                len     = item.Length;
                lenBts  = len.ToUVarInt(prefix);
            }
            else
            {
                itemBts = Encoding.UTF8.GetBytes(item);
                itemBts = _huffmanProc.Compress(itemBts);

                len    = itemBts.Length;
                lenBts = len.ToUVarInt(prefix);

                lenBts[0] |= 0x80;
            }

            byte[] result = new byte[lenBts.Length + itemBts.Length];

            Buffer.BlockCopy(lenBts, 0, result, 0, lenBts.Length);
            Buffer.BlockCopy(itemBts, 0, result, lenBts.Length, itemBts.Length);

            return(result);
        }