public void Decompress(string archFile, string txtFile) { var sr = new ArchReader(archFile); // нужно побитовое чтение var sw = new StreamWriter(txtFile, false, Encoding.Unicode); byte curBit; string code = ""; while (sr.ReadBit(out curBit)) { // TODO: побитово (!) разбираем архив if (curBit == 0) { code += "0"; } else if (curBit == 1) { code += "1"; } if (Table.ContainsValue(code)) { char symbol = Table.Where(x => x.Value == code).FirstOrDefault().Key; sw.Write(symbol); code = ""; } } sr.Finish(); sw.Close(); }
public void Decompress(string archFile, string txtFile) { var sr = new ArchReader(archFile); // нужно побитовое чтение var sw = new StreamWriter(txtFile, false, Encoding.Unicode); byte curBit; HuffmanTree curNodeTree = Tree; while (sr.ReadBit(out curBit)) { // TODO: побитово (!) разбираем архив if (curNodeTree.left == null && curNodeTree.rigth == null) { // ***TODO: это все заменить на поиск по поддереву char symbol = curNodeTree.ch; if (symbol == '\n') { sw.WriteLine(); curNodeTree = Tree; } else if (symbol != '\0') { sw.Write(symbol); curNodeTree = Tree; } else { sr.Finish(); sw.Close(); return; } } if (curBit == 0) { curNodeTree = curNodeTree.left; } else if (curBit == 1) { curNodeTree = curNodeTree.rigth; } } sr.Finish(); sw.Close(); }
public void Decompress(string archFile, string txtFile) { var sr = new ArchReader(archFile); // нужно побитовое чтение var sw = new StreamWriter(txtFile, false, Encoding.Unicode); byte curBit; while (sr.ReadBit(out curBit)) { var cur = Tree; while (true) { if (curBit.ToString() == "0") { cur = cur.left; } else { cur = cur.rigth; } if (cur.isTerminal) { break; } sr.ReadBit(out curBit); } if (cur.ch == '\n') { sw.WriteLine(); } else { sw.Write(cur.ch); } } sr.Finish(); sw.Close(); }
public void Decompress(string archFile, string txtFile) { var sr = new ArchReader(archFile); // нужно побитовое чтение var sw = new StreamWriter(txtFile, false, Encoding.Unicode); var node = Tree; while (sr.ReadBit(out var curBit)) { // TODO: побитово (!) разбираем архив node = curBit == 0 ? node.left : node.rigth; if (node.isTerminal && node.ch == '\0') { break; } if (node.isTerminal) { sw.Write(node.ch); node = Tree; } } sr.Finish(); sw.Close(); }