Example #1
0
        private static object Deserialize(MemoryStream ms, bool fromPool, Type type,
            DeserializeStringSpanDelegate deserializer)
        {
            var bytes = ms.GetBufferAsBytes();
            var utf8 = CharPool.GetBuffer(Encoding.UTF8.GetCharCount(bytes, 0, (int) ms.Length));
            try
            {
                var charsWritten = Encoding.UTF8.GetChars(bytes, 0, (int) ms.Length, utf8, 0);
                var ret = deserializer(type, new ReadOnlySpan<char>(utf8, 0, charsWritten));
                return ret;
            }
            finally
            {
                CharPool.ReleaseBufferToPool(ref utf8);

                if (fromPool)
                    ms.Dispose();
            }
        }
Example #2
0
        public void Can_ToUtf8_and_FromUtf8_in_place_using_Span()
        {
            foreach (var test in Utf8Case.Source)
            {
                var           chars        = test.expectedString.AsSpan();
                Memory <byte> buffer       = BufferPool.GetBuffer(MemoryProvider.Instance.GetUtf8ByteCount(chars));
                var           bytesWritten = MemoryProvider.Instance.ToUtf8(chars, buffer.Span);
                var           bytes        = buffer.Slice(0, bytesWritten);

                Assert.That(bytes.Length, Is.EqualTo(test.count));
                Assert.That(bytes.ToArray(), Is.EquivalentTo(test.expectedBytes));

                Memory <char> charBuff     = CharPool.GetBuffer(MemoryProvider.Instance.GetUtf8CharCount(bytes.Span));
                var           charsWritten = MemoryProvider.Instance.FromUtf8(bytes.Span, charBuff.Span);
                chars = charBuff.Slice(0, charsWritten).Span;

                Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length));
                Assert.That(chars.ToString(), Is.EqualTo(test.expectedString));
            }
        }
        private static object Deserialize(MemoryStream memoryStream, bool fromPool, Type type, DeserializeStringSpanDelegate deserializer)
        {
            var bytes = memoryStream.GetBufferAsSpan().WithoutBom();
            var chars = CharPool.GetBuffer(Encoding.UTF8.GetCharCount(bytes));

            try
            {
                var charsWritten = Encoding.UTF8.GetChars(bytes, chars);
                ReadOnlySpan <char> charsSpan = chars;
                var ret = deserializer(type, charsSpan.Slice(0, charsWritten));
                return(ret);
            }
            finally
            {
                CharPool.ReleaseBufferToPool(ref chars);

                if (fromPool)
                {
                    memoryStream.Dispose();
                }
            }
        }