public static LosableSectionInfo Parse(byte[] data, Encoding encoding) { var losableSectionInfo = new LosableSectionInfo(); using (var reader = new BinaryReader(new MemoryStream(data, false), encoding)) { losableSectionInfo.OutFile = reader.ReadStringWithLengthPrefix(encoding); losableSectionInfo.RemovedDefinedItem = RemovedDefinedItemInfo.ReadRemovedDefinedItems(reader, encoding); losableSectionInfo.UnknownAfterRemovedDefinedItem = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position)); } return(losableSectionInfo); }
public static RemovedDefinedItemInfo[] ReadRemovedDefinedItems(BinaryReader reader, Encoding encoding) { var count = reader.ReadInt32(); var size = reader.ReadInt32(); var endPosition = reader.BaseStream.Position + size; var result = new RemovedDefinedItemInfo[count]; var ids = reader.ReadInt32sWithFixedLength(count); var unknownAfterIds = reader.ReadInt32sWithFixedLength(count); var offsets = reader.ReadInt32sWithFixedLength(count); var startPosition = reader.BaseStream.Position; for (int i = 0; i < count; i++) { reader.BaseStream.Position = startPosition + offsets[i]; result[i] = new RemovedDefinedItemInfo(ids[i]) { Name = reader.ReadCStyleString(encoding), UnknownAfterId = unknownAfterIds[i] }; } reader.BaseStream.Position = endPosition; return(result); }
private void WriteTo(BinaryWriter writer, Encoding encoding) { writer.WriteStringWithLengthPrefix(encoding, OutFile); RemovedDefinedItemInfo.WriteRemovedDefinedItems(writer, encoding, RemovedDefinedItem); writer.Write(UnknownAfterRemovedDefinedItem); }