ReadByteAsync

This commit is contained in:
Adam Hathcock
2021-02-14 14:09:25 +00:00
parent 5c11075d36
commit 8cdc49cb85
3 changed files with 9 additions and 5 deletions

View File

@@ -127,9 +127,7 @@ namespace SharpCompress.Compressors.Xz
private async ValueTask ReadHeaderSize(CancellationToken cancellationToken)
{
using var buffer = MemoryPool<byte>.Shared.Rent(1);
await BaseStream.ReadAsync(buffer.Memory.Slice(0, 1), cancellationToken);
_blockHeaderSizeByte = buffer.Memory.Span[0];
_blockHeaderSizeByte = await BaseStream.ReadByteAsync(cancellationToken);
if (_blockHeaderSizeByte == 0)
{
throw new XZIndexMarkerReachedException();
@@ -142,7 +140,7 @@ namespace SharpCompress.Compressors.Xz
var read = await BaseStream.ReadAsync(blockHeaderWithoutCrc.Slice( 1, BlockHeaderSize - 5), cancellationToken);
if (read != BlockHeaderSize - 5)
{
throw new EndOfStreamException("Reached end of stream unexectedly");
throw new EndOfStreamException("Reached end of stream unexpectedly");
}
uint crc = await BaseStream.ReadLittleEndianUInt32(cancellationToken);

View File

@@ -24,6 +24,11 @@ namespace SharpCompress
await stream.ReadAsync(buffer.Memory.Slice(0, bytes), cancellationToken);
return func(buffer.Memory.Slice(0, bytes));
}
public static ValueTask<byte> ReadByteAsync(this Stream stream, CancellationToken cancellationToken)
{
return stream.ReadPrimitive(1, x => x.Span[0], cancellationToken);
}
public static ValueTask<ushort> ReadUInt16(this Stream stream, CancellationToken cancellationToken)
{
return stream.ReadPrimitive(2, x => BinaryPrimitives.ReadUInt16LittleEndian(x.Span), cancellationToken);

View File

@@ -1,4 +1,5 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using SharpCompress.Compressors.LZMA;
using Xunit;
@@ -15,7 +16,7 @@ namespace SharpCompress.Test.Streams
MemoryStream lzma2Stream = new MemoryStream(compressedData);
LzmaStream decompressor = await LzmaStream.CreateAsync(properties, lzma2Stream, 5, 1);
Assert.Equal('X', decompressor.ReadByte());
Assert.Equal('X', (char)await decompressor.ReadByteAsync(CancellationToken.None));
}
}
}