/// <inheritdoc /> public int Read(BinaryReader reader) { var byteCount = 0; var header = reader.ReadBytes(MagicHead.Length); byteCount += MagicHead.Length; if (!CompareBytes(header, MagicHead)) { throw new ConfigException("Invalid Header"); } TableCount = reader.ReadUInt16(); byteCount += sizeof(ushort); for (ushort i = 0; i < TableCount; ++i) { var tableItem = new TableItem { TableIdx = i }; byteCount += tableItem.Read(reader); TableList.Add(tableItem); var sep = reader.ReadBytes(TableSeparator.Length); byteCount += TableSeparator.Length; if (!CompareBytes(sep, GetHashedBytes(TableSeparator, i))) { throw new ConfigException("Invalid Table Separator"); } } var end = reader.ReadBytes(MagicEnd.Length); byteCount += MagicEnd.Length; if (!CompareBytes(end, MagicEnd)) { throw new ConfigException("Invalid End"); } return(byteCount); }