我有以下构造函数方法,可以从文件路径打开MemoryStream:

MemoryStream _ms;

public MyClass(string filePath)
{
    byte[] docBytes = File.ReadAllBytes(filePath);
    _ms = new MemoryStream();
    _ms.Write(docBytes, 0, docBytes.Length);
}

我需要将其更改为接受Stream而不是文件路径.从Stream个物体中得到MemoryStream的最简单/最有效的方法是什么?

推荐答案

如果要修改类以接受流而不是文件名,那么不要费心转换为MemoryStream.让底层流处理以下操作:

public class MyClass
{ 
    Stream _s;

    public MyClass(Stream s) { _s = s; }
}

但如果内部操作确实需要MemoryStream,则必须将数据从源流复制到MemoryStream:

public MyClass(Stream stream)
{
    _ms = new MemoryStream();
    CopyStream(stream, _ms);
}

// Merged From linked CopyStream below and Jon Skeet's ReadFully example
public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[16*1024];
    int read;
    while((read = input.Read (buffer, 0, buffer.Length)) > 0)
    {
        output.Write (buffer, 0, read);
    }
}

.net相关问答推荐

在`MAUI`应用中使用Android`MediaPlayer`的`prepare`方法只在发布模式下和在物理设备上崩溃

如何使用 awslocal 通过 localstack 中的 cloudwatch events/eventbridge 触发 lambda

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

无法使用 int.Parse 从字符串转换值

每当属性值发生变化时引发事件?

在 C# 中将字符串转换为 colored颜色

log4net 与 TraceSource

.NET 世界是否有 Maven 替代方案或端口?

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

.Net 中的 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么

为什么 ?: 会导致转换错误,而 if-else 不会?

C# 相当于 Java 的 <?在泛型中扩展 Base>

在 .NET 中填充整数列表

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

监听依赖属性的变化

一个接口是否应该继承另一个接口

如何在 WPF 中的 Xaml 文件中添加注释?

错误 NU1605 检测到包降级

System.Array.CopyTo() 和 System.Array.Clone() 之间的区别

在 WPF 中设置 Tab 键顺序