Esempio n. 1
0
        static void Encode(string input, string fileName)
        {
            var haffman  = new Tree(input);
            var bits     = haffman.Encode();
            var treeBits = haffman.getEncodedTree();
            var writer   = new BinStream(fileName + ".enc");

            writer.WriteBits(treeBits, FileMode.Create);
            writer.WriteBits(new BitArray(Encoding.GetEncoding(1251).GetBytes("\n\0\n")), FileMode.Append);
            writer.WriteBits(bits, FileMode.Append);
        }
Esempio n. 2
0
        static void Decode(string fileName)
        {
            var haffman = new Tree(fileName);

            using (var file = new FileStream(fileName, FileMode.Open))
            {
                using (var binReader = new BinaryReader(file))
                {
                    var treeBytes = new List <byte>();
                    var tmp       = new byte[3];
                    //Check for stop bytes "\n\0\n"
                    while (true)
                    {
                        tmp[0] = binReader.ReadByte();
                        if ((tmp[0]) == (byte)'\n')
                        {
                            tmp[1] = binReader.ReadByte();
                            if ((tmp[1]) == (byte)'\0')
                            {
                                tmp[2] = binReader.ReadByte();
                                if ((tmp[2]) == (byte)'\n')
                                {
                                    break;
                                }
                                treeBytes.AddRange(tmp);
                            }
                            else
                            {
                                treeBytes.Add(tmp[0]);
                                treeBytes.Add(tmp[1]);
                            }
                        }
                        else
                        {
                            treeBytes.Add(tmp[0]);
                        }
                    }
                    var count = treeBytes.Count;
                    file.Seek(0, SeekOrigin.Begin);
                    var treeBits = new BinStream().ReadBits(treeBytes.ToArray());
                    file.Seek(count + 4, SeekOrigin.Begin);
                    var fileBits = new BinStream().ReadBits(binReader.ReadBytes((int)file.Length - count - 4));
                    File.WriteAllText("DEC" + fileName.Remove(fileName.LastIndexOf(".")), haffman.Decode(treeBits, fileBits),
                                      Encoding.GetEncoding(1251));
                }
            }
        }