public void Deserialize(Stream input) { /* * var magic = input.ReadValueU32(Endian.Little); * var endian = Endian.Little; * * Console.WriteLine("0"); * * if (magic != _Signature) * { * magic = input.ReadValueU32(Endian.Big); * * if (magic == _Signature) * { * Console.WriteLine("1A"); * endian = Endian.Big; * } * else * { * Console.WriteLine("1B"); * //throw new FormatException("invalid header magic"); * } * } * * var version = input.ReadValueU16(endian); * * if (version != 3) * { * Console.WriteLine("2"); * //throw new FormatException("unsupported file version"); * } * * var flags = input.ReadValueEnum<HeaderFlags>(endian); * * if (flags != HeaderFlags.None) * { * Console.WriteLine("3"); * //throw new FormatException("unsupported file flags"); * } * * Console.Write($"\nFile info:\n\tMagic = {magic:X8}\n\tVersion = {version}\n\tFlags = {flags}\n"); */ var endian = Endian.Little; // store header, read magic uint magic = input.ReadValueU32(endian); long magicOffset = 0; string header = ""; if (magic != _Signature) { Utility.Log("Reading header..."); while (magicOffset == 0) { var latest = input.ReadValueU32(); if (latest == _Signature) { magicOffset = input.Position - 4; Utility.Log("Signature found!"); break; } } header = GetHeaderString(input, magicOffset); input.Position = magicOffset; magic = input.ReadValueU32(endian); Utility.Log("Done!"); } // store version var version = input.ReadValueU16(endian); // everything else var flags = input.ReadValueEnum <HeaderFlags>(endian); var totalObjectCount = input.ReadValueU32(endian); var totalValueCount = input.ReadValueU32(endian); var pointers = new List <BinaryObject>(); //Console.ForegroundColor = ConsoleColor.DarkGray; //Console.Write($"Magic: {magic:X8}\nVersion: {version:X4}\nFlags: {flags}\nHeader Length: {header.Length / 2}\n\n"); //Console.ResetColor(); this.Header = header; this.Version = version; this.Flags = flags; this.Root = BinaryObject.Deserialize(null, input, pointers, endian); }