是否有一个优雅的方法来模仿BinaryReaderStreamReader.ReadToEnd方法?也许把所有字节放入字节数组?

我这样做:

read1.ReadBytes((int)read1.BaseStream.Length);

...但一定有更好的办法.

推荐答案

原始答案(请阅读下面的更新!)

只需执行以下操作:

byte[] allData = read1.ReadBytes(int.MaxValue);

documentation表示它将读取所有字节,直到到达流的末尾.


更新

尽管这看起来很优雅,文档似乎表明这将会起作用,但实际的implementation(在.NET2、3.5和4中判断)为数据分配了一个完整大小的字节数组,这可能会在32位系统上导致OutOfMemoryException.

因此,我会说实际上是there isn't an elegant way.

Instead, I would recommend the following variation of @iano's answer. This variant doesn't rely on .NET 4:
Create an extension method for BinaryReader (or Stream, the code is the same for either).

public static byte[] ReadAllBytes(this BinaryReader reader)
{
    const int bufferSize = 4096;
    using (var ms = new MemoryStream())
    {
        byte[] buffer = new byte[bufferSize];
        int count;
        while ((count = reader.Read(buffer, 0, buffer.Length)) != 0)
            ms.Write(buffer, 0, count);
        return ms.ToArray();
    }
    
}

.net相关问答推荐

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

在 C# 中,如何使用泛型的基类将泛型接口的所有实例注入到单个构造函数中?

如何为多种文件类型设置 FileSystemWatcher 过滤器?

如何为构造函数自定义 Visual Studio 的私有字段生成快捷方式?

如何从 HashSet 中检索实际项目?

奇数返回语法语句

微软内部 PriorityQueue 中的错误?

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

为什么无穷大在 Windows 10 控制台中打印为“8”?

如何解码 JWT 令牌?

找不到库 hostpolicy.dll

如何指定托管 ASP.NET Core 应用程序的端口?

多行 C# 插值字符串文字

如何在插值字符串中使用三元运算符?

为什么 !0 是 Microsoft 中间语言 (MSIL) 中的一种类型?

为什么我不能在 lambda 表达式中使用空传播运算符?

在方法名称中使用“异步”后缀是否取决于是否使用了“异步”修饰符?

NuGetPackageImportStamp 有什么用?

Microsoft.Bcl.Build NuGet 包有什么作用?