Пример #1
0
        public unsafe byte[] Compress(string input)
        {
            var frequencies = _frequencyCalculator.GetFrequencies(input).ToList();

            _huffmanTree.Build(frequencies);

            var blob = new Blob();

            BuildPathCache(frequencies);

            var length = input.Length;

            fixed(char *inputPointer = input)
            {
                for (var i = 0; i < length; i++)
                {
                    blob.Append(_pathCache[inputPointer[i]]);
                }
            }

            var data = new CompressedData
            {
                Data           = blob.ToByteArray(),
                Frequencies    = frequencies,
                OriginalLength = input.Length
            };

            return(data.Save());
        }
Пример #2
0
        public byte[] Compress(string input)
        {
            var frequencies = _frequencyCalculator.GetFrequencies(input).ToList();

            _huffmanTree.Build(frequencies);

            var blob = new Blob();

            _pathCache = new Dictionary <char, string>();

            foreach (var character in input)
            {
                _pathCache.TryGetValue(character, out var path);

                if (path == null)
                {
                    path = _huffmanTree.GetPath(character);

                    _pathCache.Add(character, path);

                    blob.Append(path);
                }
                else
                {
                    blob.Append(path);
                }
            }

            var data = new CompressedData
            {
                Data           = blob.ToByteArray(),
                Frequencies    = frequencies,
                OriginalLength = input.Length
            };

            return(data.Save());
        }