private string GetDecompressedText(string compressedFilePath, string compressedFileKeysPath) { var reader = new TxtReader(); var compressor = new HuffmanCompressor(); var byteReader = new ByteReader(); var byteContent = byteReader.ReadFile(compressedFilePath); var bytes = ByteExtractor.GetBytes(byteContent); var codesString = reader.ReadFile(compressedFileKeysPath, Encoding.UTF8); var codesToDecoding = DictionaryConverter.ConvertFromString(codesString); var decompressedText = compressor.Decompress(bytes, codesToDecoding); return(decompressedText); }
private Tuple <byte[], string> GetCompressedTextAndCodes(string filePath) { var reader = new TxtReader(); var preprocessor = new HuffmanPreprocessor(); var compressor = new HuffmanCompressor(); var fileContent = reader.ReadFile(filePath, Encoding.UTF8); var charsCount = CharCounter.GetSymbolsCount(fileContent); var sortedChars = charsCount.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value); var nodeList = preprocessor.GetNodeList(sortedChars); var tree = preprocessor.GetHuffmanTree(nodeList); var codes = preprocessor.GetCharCodes(tree); var compressedText = compressor.GetCompressedText(fileContent, codes); codes.Add(compressedText.Length.ToString(), new byte[0]); var codesText = DictionaryConverter.ConvertToString(codes); return(new Tuple <byte[], string>(compressedText, codesText)); }