From 8cdc49cb85dfc2796fe10bd1660f66642179bb08 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Sun, 14 Feb 2021 14:09:25 +0000 Subject: [PATCH] ReadByteAsync --- src/SharpCompress/Compressors/Xz/XZBlock.cs | 6 ++---- src/SharpCompress/Utility.cs | 5 +++++ tests/SharpCompress.Test/Streams/LzmaStreamTests.cs | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/SharpCompress/Compressors/Xz/XZBlock.cs b/src/SharpCompress/Compressors/Xz/XZBlock.cs index da638fc2..a8e24480 100644 --- a/src/SharpCompress/Compressors/Xz/XZBlock.cs +++ b/src/SharpCompress/Compressors/Xz/XZBlock.cs @@ -127,9 +127,7 @@ namespace SharpCompress.Compressors.Xz private async ValueTask ReadHeaderSize(CancellationToken cancellationToken) { - using var buffer = MemoryPool.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); diff --git a/src/SharpCompress/Utility.cs b/src/SharpCompress/Utility.cs index b889b898..8f54b837 100644 --- a/src/SharpCompress/Utility.cs +++ b/src/SharpCompress/Utility.cs @@ -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 ReadByteAsync(this Stream stream, CancellationToken cancellationToken) + { + return stream.ReadPrimitive(1, x => x.Span[0], cancellationToken); + } public static ValueTask ReadUInt16(this Stream stream, CancellationToken cancellationToken) { return stream.ReadPrimitive(2, x => BinaryPrimitives.ReadUInt16LittleEndian(x.Span), cancellationToken); diff --git a/tests/SharpCompress.Test/Streams/LzmaStreamTests.cs b/tests/SharpCompress.Test/Streams/LzmaStreamTests.cs index 873ed94c..01d6c078 100644 --- a/tests/SharpCompress.Test/Streams/LzmaStreamTests.cs +++ b/tests/SharpCompress.Test/Streams/LzmaStreamTests.cs @@ -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)); } } } \ No newline at end of file