private void ReadLump(BinaryReader reader) { var lumpTypeId = reader.ReadByte(); var lumpLength = reader.ReadInt32(); var lumpType = PSSLump.GetLumpType(lumpTypeId); // skip unknown lumps if (lumpType == null) { reader.ReadBytes(lumpLength); // TODO: Seek would probably be faster return; } var lump = (PSSLump)Activator.CreateInstance(lumpType); lump.Read(reader, this); }
private void WriteLump(BinaryWriter writer, PSSLump lump) { using (var bufferStream = new MemoryStream()) using (var bufferWriter = new BinaryWriter(bufferStream)) { lump.Write(bufferWriter, this); bufferWriter.Flush(); bufferWriter.Close(); var payload = bufferStream.ToArray(); if (payload.Length > 0) { writer.Write(lump.lumpTypeId); writer.Write(payload.Length); writer.Write(payload); } } }