예제 #1
0
        public static void ReadWriteUsingArray()
        {
            using var writer = new PooledArrayBufferWriter <byte>(ArrayPool <byte> .Shared, 25);
            True(writer.Capacity >= 25);
            True(writer.WrittenArray.Count == 0);
            Equal(0, writer.WrittenCount);

            var memory = writer.GetArray(100);

            new ArraySegment <byte>(new byte[] { 10, 20, 30 }).CopyTo(memory);
            writer.Advance(3);

            var result = writer.WrittenArray;

            Equal(3, result.Count);
            Equal(3, writer.WrittenCount);
            Equal(10, result[0]);
            Equal(20, result[1]);
            Equal(30, result[2]);

            memory = writer.GetArray(3);
            new ArraySegment <byte>(new byte[] { 40, 50, 60 }).CopyTo(memory);
            writer.Advance(3);

            result = writer.WrittenArray;
            Equal(6, writer.WrittenCount);
            Equal(6, result.Count);
            Equal(10, result[0]);
            Equal(20, result[1]);
            Equal(30, result[2]);
            Equal(40, result[3]);
            Equal(50, result[4]);
            Equal(60, result[5]);
        }
예제 #2
0
        public static void ReuseArrayWriter()
        {
            using var writer = new PooledArrayBufferWriter <byte>();
            var span = writer.GetSpan(10);

            span[0] = 20;
            span[9] = 30;
            writer.Advance(10);
            writer.Clear();

            span    = writer.GetSpan(10);
            span[0] = 40;
            span[9] = 50;
            writer.Advance(10);

            Equal(40, writer.WrittenMemory.Span[0]);
            Equal(50, writer.WrittenMemory.Span[9]);
        }
예제 #3
0
        public static void StreamInterop()
        {
            using var writer = new PooledArrayBufferWriter <byte>();
            var span = writer.GetSpan(10);

            new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }.AsSpan().CopyTo(span);
            writer.Advance(10);
            using var stream = StreamSource.GetWrittenBytesAsStream(writer);
            True(stream.CanRead);
            False(stream.CanWrite);
            Equal(0, stream.Position);
            Equal(10, stream.Length);
            var buffer = new byte[10];

            Equal(10, stream.Read(buffer, 0, 10));
            for (var i = 0; i < buffer.Length; i++)
            {
                Equal(i, buffer[i]);
            }
        }