我的根本问题是,在using
调用Dispose
时StreamWriter
,它还会处理BaseStream
(与相同的问题Close
)。
我有一个解决方法,但是如您所见,它涉及复制流。有什么方法可以做到不复制流?
这样做的目的是将字符串的内容(最初是从数据库中读取)放入流中,以便第三方组件可以读取该流。
注意:我无法更改第三方组件。
public System.IO.Stream CreateStream(string value)
{
var baseStream = new System.IO.MemoryStream();
var baseCopy = new System.IO.MemoryStream();
using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
{
writer.Write(value);
writer.Flush();
baseStream.WriteTo(baseCopy);
}
baseCopy.Seek(0, System.IO.SeekOrigin.Begin);
return baseCopy;
}
用作
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
理想情况下,我正在寻找一种称为的假想方法BreakAssociationWithBaseStream
,例如
public System.IO.Stream CreateStream_Alternate(string value)
{
var baseStream = new System.IO.MemoryStream();
using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
{
writer.Write(value);
writer.Flush();
writer.BreakAssociationWithBaseStream();
}
return baseStream;
}