我今天正在阅读StreamWriter
,并遇到了这个属性BaseStream
。
我正在寻找定义并找到了这个
“获取与后备存储接口的基础流。”
从这里MSDN - StreamWriter.BaseStream
我理解BaseStream对于StreamReader是什么,因为它的定义非常简单:
返回基础流。
但是StreamWriter.BaseStream的定义是什么意思?或者更清楚的是,这部分定义的意思是“与后备存储的接口”?这听起来像是胡言乱语。
答案 0 :(得分:2)
因此Stream
的通用定义是:
提供序列的通用视图 字节。
和StreamWriter
:
实现TextWriter以进行编写 字符到特定的流 编码
因此BaseStream
属性是字符写入的位置。这可能是FileStream
或MemoryStream
或其他任何实现Stream
的内容。我觉得更好的描述是:
获取基础流。
答案 1 :(得分:2)
你是对的;它似乎不必要地冗长,特别是与类似的StreamReader.BaseStream
相比。实际上,它只返回对底层流的引用,与StreamReader完全相同。
我认为描述的假设是写入底层流将涉及将写入的数据保存到某种持久性存储,例如文件。当然,这在现实中根本不是必要的(在最坏的情况下,它可能根本就什么都不做)。
如果确实想要推断,您可以将其解释为底层流的CanWrite
属性为true
(至少在它附加到StreamWriter的)。
要确信它真的只是返回底层流,这里是Reflector的反编译代码:
public virtual Stream BaseStream
{
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
get
{
return this.stream;
}
}
在stream
方法中分配了Init
字段:
private void Init(Stream stream, Encoding encoding, int bufferSize)
{
this.stream = stream;
...
反过来由构造函数调用,参数为附加流:
[SecuritySafeCritical]
public StreamWriter(Stream stream, Encoding encoding, int bufferSize)
: base(null)
{
...
this.Init(stream, encoding, bufferSize);
}
答案 2 :(得分:0)
我认为这是为了你“daisychain”流。
例如,您的代码写入流A,该流写入流B,写入流C,写入磁盘。
在该实例中,流A的基本流是B.