// 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); }