public static byte[] Decode(Stream stream, bool readStrict = false) { if (!readStrict) { var buffer = Jetsons.MsgPack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool! var len = FillFromStream(stream, ref buffer); return(Decode(new ArraySegment <byte>(buffer, 0, len))); } else { int blockSize; var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize); return(Decode(new ArraySegment <byte>(bytes, 0, blockSize))); } }
public static T Deserialize <T>(Stream stream, IFormatterResolver resolver, bool readStrict) { if (!readStrict) { var buffer = Jetsons.MsgPack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool! var len = FillFromStream(stream, ref buffer); return(DeserializeCore <T>(new ArraySegment <byte>(buffer, 0, len), resolver)); } else { int blockSize; var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize); return(DeserializeCore <T>(new ArraySegment <byte>(bytes, 0, blockSize), resolver)); } }
public static T Deserialize <T>(Stream stream, IFormatterResolver resolver, bool readStrict) { if (resolver == null) { resolver = DefaultResolver; } var formatter = resolver.GetFormatterWithVerify <T>(); if (!readStrict) { #if NETSTANDARD && !NET45 var ms = stream as MemoryStream; if (ms != null) { // optimize for MemoryStream ArraySegment <byte> buffer; if (ms.TryGetBuffer(out buffer)) { int readSize; return(formatter.Deserialize(buffer.Array, buffer.Offset, resolver, out readSize)); } } #endif // no else. { var buffer = InternalMemoryPool.GetBuffer(); FillFromStream(stream, ref buffer); int readSize; return(formatter.Deserialize(buffer, 0, resolver, out readSize)); } } else { int _; var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out _); int readSize; return(formatter.Deserialize(bytes, 0, resolver, out readSize)); } }
static T DeserializeWithLengthPrefixExt2 <T>(Stream stream, IFormatterResolver resolver) { const int ExtTypeCode = 111; // sample ext code using (var output = new ArrayBufferWriter(16)) { MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, output); var reader = new MessagePackReader(output.WrittenSpan); var header = reader.ReadExtensionFormat(); if (header.TypeCode == ExtTypeCode) { return(MessagePackSerializer.Deserialize <T>(header.Data, resolver)); } else { throw new Exception(); } } }
static T DeserializeWithLengthPrefixExt <T>(Stream stream, IFormatterResolver resolver) { const int ExtTypeCode = 111; // sample ext code using (var output = new ArrayBufferWriter(16)) { MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, output); var reader = new MessagePackReader(output.WrittenSpan); var header = reader.ReadExtensionFormatHeader(); if (header.TypeCode == ExtTypeCode) { // memo, read fully var valueSpan = reader.Peek((int)header.Length); var reader0 = new MessagePackReader(valueSpan); return(resolver.GetFormatter <T>().Deserialize(ref reader0, resolver)); } else { throw new Exception(); } } }