public override NomadObject Deserialize(Stream stream) { if (Context.State == ContextStateType.End) { Context.Reset(); } var _stream = (stream as BinaryStream) ?? new BinaryStream(stream); var magic = _stream.ReadInt32(); if (magic == MGX_CONTAINER) { var dataSize = _stream.ReadInt32(); var compSize = _stream.ReadInt32(); var checksum = _stream.ReadInt32(); var buffer = new byte[dataSize]; if (compSize != 0) { var lz = new LZ4Decompressor64(); var tmp = new byte[compSize]; _stream.Read(tmp, 0, compSize); lz.DecompressKnownSize(tmp, buffer, dataSize); } else { _stream.Read(buffer, 0, dataSize); } using (var bs = new BinaryStream(buffer)) { return(ReadMapData(bs)); } } else { // move back and read normally _stream.Position -= 4; return(ReadMapData(_stream)); } }
public void Deserialize(BinaryStream input) { Name = input.ReadInt32(); StringCount = input.ReadInt32(); for (int i = 0; i < StringCount; i++) { var locStr = new OasisLocalizedString(); locStr.Deserialize(input, Name); LocalizedStrings.Add(locStr); } CompressedValuesSectionsCount = input.ReadInt32(); for (int i = 0; i < CompressedValuesSectionsCount; i++) { var cpr = new CompressedValues(); cpr.Deserialize(input); var lz = new LZ4Decompressor64(); var buf = new byte[cpr.DecompressedSize]; lz.DecompressKnownSize(cpr.CompressedBytes, buf, cpr.DecompressedSize); var dCpr = new DecompressedValues(); using (var bs = new BinaryStream(buf)) dCpr.Deserialize(bs); foreach (var kv in dCpr.IdValuePairs) { var id = kv.Key; var value = kv.Value; OasisStringLookup.SetString(id, value); } } }