Beispiel #1
0
        public static T Deserialize <T>(Stream stream, IFormatterResolver resolver, bool readStrict)
        {
            if (resolver == null)
            {
                resolver = defaultResolver;
            }
            var formatter = resolver.GetFormatterWithVerify <T>();

            if (!readStrict)
            {
                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));
            }
        }
Beispiel #2
0
        public static byte[] Decode(Stream stream, bool readStrict = false)
        {
            if (!readStrict)
            {
                var buffer = InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool!
                var len    = FillFromStream(stream, ref buffer);
                return(Decode(new ArraySegment <byte>(buffer, 0, len)));
            }

            int blockSize;
            var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize);

            return(Decode(new ArraySegment <byte>(bytes, 0, blockSize)));
        }
Beispiel #3
0
        public static T Deserialize <T>(Stream stream, IFormatterResolver resolver, bool readStrict)
        {
            if (!readStrict)
            {
                var buffer = InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool!
                var len    = FillFromStream(stream, ref buffer);
                return(DeserializeCore <T>(new ArraySegment <byte>(buffer, 0, len), resolver));
            }

            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 NETSTANDARD1_4 && !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));
            }
        }
Beispiel #5
0
        public override T Deserialize <T>(Stream stream, IFormatterResolver resolver, bool readStrict)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            if (!readStrict)
            {
                var buffer = MessagePack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool!
                var len    = FillFromStream(stream, ref buffer);
                return(DeserializeCore <T>(new ArraySegment <byte>(buffer, 0, len), resolver, out int readSize));
            }
            else
            {
                int blockSize;
                var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize);
                return(DeserializeCore <T>(new ArraySegment <byte>(bytes, 0, blockSize), resolver, out int readSize));
            }
        }