diff --git a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertMethodsBenchmark.cs b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertMethodsBenchmark.cs index 6fbb633327..dfe99254f4 100644 --- a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertMethodsBenchmark.cs +++ b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertMethodsBenchmark.cs @@ -18,6 +18,20 @@ public void Setup() _convertStreamToByteArray = new ConvertStreamToByteArray(); } + [Benchmark] + public void UseReadExactly() + { + using var _benchmarkStream = new FileStream(_sampleFilePath, FileMode.Open, FileAccess.Read); + _convertStreamToByteArray.UseReadExactly(_benchmarkStream); + } + + [Benchmark] + public void UseCopyTo() + { + using var _benchmarkStream = new FileStream(_sampleFilePath, FileMode.Open, FileAccess.Read); + _convertStreamToByteArray.UseCopyTo(_benchmarkStream); + } + [Benchmark] public void UseStreamDotReadMethod() { diff --git a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertStreamToByteArray.cs b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertStreamToByteArray.cs index 8afd81513d..543b7cb338 100644 --- a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertStreamToByteArray.cs +++ b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/ConvertStreamToByteArray.cs @@ -2,6 +2,23 @@ { public class ConvertStreamToByteArray { + public byte[] UseReadExactly(Stream stream) + { + var bytes = new byte[stream.Length]; + stream.ReadExactly(bytes); + + return bytes; + } + + public byte[] UseCopyTo(Stream stream) + { + using var memoryStream = new MemoryStream(); + stream.CopyTo(memoryStream); + + return memoryStream.ToArray(); + } + + public byte[] UseStreamDotReadMethod(Stream stream) { byte[] bytes; @@ -73,5 +90,19 @@ public byte[] UseBufferedStream(Stream stream) return bytes; } + + public Stream UseMemoryStreamConstructor(byte[] bytes) + { + return new MemoryStream(bytes); + } + + public Stream UseWritableMemoryStream(byte[] bytes) + { + var stream = new MemoryStream(); + stream.Write(bytes, 0, bytes.Length); + stream.Position = 0; + + return stream; + } } } \ No newline at end of file diff --git a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray.csproj b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray.csproj index 98bdba87fa..c87bc06872 100644 --- a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray.csproj +++ b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray/HowToConvertAStreamToAByteArray.csproj @@ -2,13 +2,13 @@ Exe - net7.0 + net10.0 enable disable - + diff --git a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/ConvertMethodsTest.cs b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/ConvertMethodsTest.cs index 5c8e7bfde8..a8f4eb21e0 100644 --- a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/ConvertMethodsTest.cs +++ b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/ConvertMethodsTest.cs @@ -57,5 +57,47 @@ public void GivenAStream_WhenConvertingWithStreamReader_ThenReturnsAByteArray() Assert.Equal(_expected, result); } + + [Fact] + public void GivenAStream_WhenConvertingWithReadExactly_ThenReturnsAByteArray() + { + var result = _converter.UseReadExactly(_stream); + + Assert.Equal(_expected, result); + } + + [Fact] + public void GivenAStream_WhenConvertingWithCopyTo_ThenReturnsAByteArray() + { + var result = _converter.UseCopyTo(_stream); + + Assert.Equal(_expected, result); + } + + [Fact] + public void GivenAByteArray_WhenWrappingInAMemoryStreamConstructor_ThenStreamReadsBackTheSameBytes() + { + var result = _converter.UseMemoryStreamConstructor(_expected); + + Assert.Equal(_expected.Length, result.Length); + Assert.Equal(_expected, ReadToEnd(result)); + } + + [Fact] + public void GivenAByteArray_WhenWritingToAnExpandableMemoryStream_ThenStreamReadsBackTheSameBytes() + { + var result = _converter.UseWritableMemoryStream(_expected); + + Assert.Equal(_expected.Length, result.Length); + Assert.Equal(_expected, ReadToEnd(result)); + } + + private static byte[] ReadToEnd(Stream stream) + { + using var memoryStream = new MemoryStream(); + stream.CopyTo(memoryStream); + + return memoryStream.ToArray(); + } } } \ No newline at end of file diff --git a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/Tests.csproj b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/Tests.csproj index 7c92e8e469..521bd5dfa1 100644 --- a/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/Tests.csproj +++ b/csharp-intermediate-topics/HowToConvertAStreamToAByteArray/Tests/Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable disable @@ -9,13 +9,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all