discussed before一样,当BinaryReader或BinaryWriter关闭时,其基础Stream也将关闭(aargh)。考虑这种情况:例程R传递给MemoryStream,例如M;我想将一些东西写入M,然后将其传递给另一个例程以进行更多处理(不一定要编写)。为了方便起见,我想将M包装在BinaryWriter中进行编写。写完之后,我完成了BinaryWriter,但没有完成M

void R(MemoryStream M)
{
    using (B = new BinaryWriter(M))
    {
        // write some stuff using B
    }

    S(M);  // now pass M to another routine for further processing
}

但是,如果不关闭M,就无法处置BinaryStream。

问:是否可以执行以下任一操作?
  • 从MemoryStream提取底层字节[]
  • 克隆流
  • 关闭流后,重新打开流
  • 最佳答案

    您最好使用以下方法获取底层的byte []缓冲区

    byte[] buffer = ms.GetBuffer();
    

    然后使用Array.Copy()方法复制字节数据。
    您可以自由地使用它创建一个新的流。

    10-06 05:07