I. *_*edy 8 c# clone memorystream stream
正如前面所讨论的,当一个BinaryReader在或的BinaryWriter被关闭,它的底层流中获取关闭以及(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
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法在不关闭的情况下处理BinaryStream M.
问:有没有办法做以下任何一种情况?
你最好使用底层的byte []缓冲区
byte[] buffer = ms.GetBuffer();
Run Code Online (Sandbox Code Playgroud)
然后使用Array.Copy()方法复制字节数据.您可以随意创建新流.
您可以使用的东西,如MiscUtil.IO.NonClosingStreamWrapper在MiscUtil,其中封装了Stream和简单地忽略Close/ Dispose请求.就是为了这个目的.
void R(MemoryStream M)
{
using (B = new BinaryWriter(new NonClosingStreamWrapper(M)))
{
// write some stuff using B
}
S(M); // now pass M to another routine for further processing
}
Run Code Online (Sandbox Code Playgroud)
感谢几个建议 ToArray 的人,我得到了正确的答案,即“M.GetBuffer”。ToArray 还不错,但是它
GetBuffer 只是获取对底层 byte[] 的引用,这就是我所追求的。
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |