示例#1
0
        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();
        }
示例#2
0
        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();
        }
示例#3
0
        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();
        }