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); } }
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); } }
public void Deserialize(byte[] buffer, ref int offset, ref Color value) { var argb = SerializerBinary.ReadInt32Fixed(buffer, ref offset); value = Color.FromArgb(argb); }