// readStrict async read is too slow(many Task garbage) so I don't provide async option.

        public static async System.Threading.Tasks.Task <T> DeserializeAsync <T>(Stream stream, IFormatterResolver resolver)
        {
            var rentBuffer = BufferPool.Default.Rent();
            var buf        = rentBuffer;

            try
            {
                int length = 0;
                int read;
                while ((read = await stream.ReadAsync(buf, length, buf.Length - length).ConfigureAwait(false)) > 0)
                {
                    length += read;
                    if (length == buf.Length)
                    {
                        MessagePackBinary.FastResize(ref buf, length * 2);
                    }
                }

                return(Deserialize <T>(buf, resolver));
            }
            finally
            {
                BufferPool.Default.Return(rentBuffer);
            }
        }
        /// <summary>
        /// From Json String to MessagePack binary
        /// </summary>
        public static byte[] FromJson(TextReader reader)
        {
            var offset = 0;

            byte[] binary = null;
            using (var jr = new TinyJsonReader(reader, false))
            {
                FromJsonCore(jr, ref binary, ref offset);
            }
            MessagePackBinary.FastResize(ref binary, offset);
            return(binary);
        }
        static int FillFromStream(Stream input, ref byte[] buffer)
        {
            int length = 0;
            int read;

            while ((read = input.Read(buffer, length, buffer.Length - length)) > 0)
            {
                length += read;
                if (length == buffer.Length)
                {
                    MessagePackBinary.FastResize(ref buffer, length * 2);
                }
            }

            return(length);
        }