public Entry(Header h, IndexEntry e, Stream stream) { this.h = h; this.e = e; data = new byte[h.DataBlockLength * e.BlocksCount]; for (int i = 0; i < e.BlocksCount; i++) { stream.Position = e.GetBlockOffset(i) * h.DataBlockLength; stream.Read(data, h.DataBlockLength * i, h.DataBlockLength); } BinaryReader reader = new BinaryReader(new MemoryStream(data)); _00 = reader.ReadUInt16(); _02 = reader.ReadUInt16(); offset = reader.ReadUInt16(); _06 = reader.ReadUInt16(); _08 = reader.ReadUInt16(); _0a = reader.ReadUInt16(); count = reader.ReadUInt16(); reader.BaseStream.Position = offset; value = new Value[activeEntries = e.activeEntries]; for (int i = 0; i < value.Length; i++) value[i] = new Value(reader, this, i); }