public async Task <object> DeserializeAsync(Stream stream, Type type, CancellationToken cancellationToken = default)
        {
            var headerBuffer = new byte[9];
            await stream.ReadAsync(headerBuffer, 0, HeaderLength, cancellationToken).ConfigureAwait(false);

            var offset = 0;
            var header = SerializerBinary.ReadByte(headerBuffer, ref offset);

            if (header != Header)
            {
                throw new Exception("Not expected header error");
            }
            var compressedLength   = SerializerBinary.ReadInt32Fixed(headerBuffer, ref offset);
            var uncompressedLength = SerializerBinary.ReadInt32Fixed(headerBuffer, ref offset);

            var buffer = ArrayPool <byte> .Shared.Rent(compressedLength + uncompressedLength);

            try
            {
                await stream.ReadAsync(buffer, 0, compressedLength, cancellationToken).ConfigureAwait(false);

                LZ4Codec.Decode(
                    buffer, 0, compressedLength,
                    buffer, compressedLength, uncompressedLength);

                object obj = DeserializeCore(buffer, compressedLength, uncompressedLength);

                return(obj);
            }
            finally
            {
                ArrayPool <byte> .Shared.Return(buffer);
            }
        }
Пример #2
0
        public void Deserialize(byte[] buffer, ref int offset, ref Color value)
        {
            bool isKnownColor = SerializerBinary.ReadByte(buffer, ref offset) != 0;

            if (isKnownColor)
            {
                int knownColor = SerializerBinary.ReadInt32Fixed(buffer, ref offset);
                value = Color.FromKnownColor((KnownColor)knownColor);
            }
            else
            {
                var argb = SerializerBinary.ReadInt32Fixed(buffer, ref offset);
                value = Color.FromArgb(argb);
            }
        }
Пример #3
0
        public void Deserialize(byte[] buffer, ref int offset, ref Color value)
        {
            var argb = SerializerBinary.ReadInt32Fixed(buffer, ref offset);

            value = Color.FromArgb(argb);
        }