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