>将输入流转换为.NET中的字节数组:比较分析
>.NET提供了几种将输入流转换为字节数组的方法。 本文比较了共同的方法,突出了它们的优势和劣势。
>最简单的方法使用BinaryReader.ReadBytes
,如下所示:
<code class="language-csharp">using (BinaryReader br = new BinaryReader(s)) { b = br.ReadBytes((int)s.Length); }</code>,如果事先已知流的长度(
),这将是有效的。但是,情况并非总是如此。s.Length
>
对于长度未知的流,需要更坚固的解决方案。 以下方法,利用
>
Stream.Read
<code class="language-csharp">public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[16 * 1024]; using (MemoryStream ms = new MemoryStream()) { int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } }</code>.net 4.0和更高版本的版本使用
>:
提供了更简洁,更有效的替代方案
Stream.CopyTo
这与以前的方法相同,但具有改善的简洁性。
<code class="language-csharp">public static byte[] ReadFully(Stream input) { using (MemoryStream ms = new MemoryStream()) { input.CopyTo(ms); return ms.ToArray(); } }</code>最佳方法取决于您的特定需求。 当已知流长度时,
>是合适的,而
(在任何一个实现中)为未知或可变长度的流提供了可靠的解决方案。 该方法是.NET 4.0及以上的最有效,最可读的选项。以上是如何有效地将输入流转换为.NET中的字节数组?的详细内容。更多信息请关注PHP中文网其他相关文章!