首页 >后端开发 >C++ >如何有效地将输入流转换为.NET中的字节数组?

如何有效地将输入流转换为.NET中的字节数组?

Barbara Streisand
Barbara Streisand原创
2025-01-31 07:06:13395浏览

How to Efficiently Convert an Input Stream to a Byte Array in .NET?

>将输入流转换为.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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn