我今天正在阅读StreamWriter,并遇到了这个属性,BaseStream。
我正在寻找一个定义并找到了这个
“获取与后备存储接口的底层流。”
从这里MSDN - StreamWriter.BaseStream
我了解 StreamReader 的 BaseStream 是什么,因为它的定义非常简单:
返回基础流。
但是 StreamWriter.BaseStream 的定义是什么意思?或者更清楚地说,定义的这一部分是什么意思“与后备存储的接口”?这对我来说听起来像是胡言乱语。
我今天正在阅读StreamWriter,并遇到了这个属性,BaseStream。
我正在寻找一个定义并找到了这个
“获取与后备存储接口的底层流。”
从这里MSDN - StreamWriter.BaseStream
我了解 StreamReader 的 BaseStream 是什么,因为它的定义非常简单:
返回基础流。
但是 StreamWriter.BaseStream 的定义是什么意思?或者更清楚地说,定义的这一部分是什么意思“与后备存储的接口”?这对我来说听起来像是胡言乱语。
你是对的; 它确实显得不必要地冗长,尤其是与类似的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);
}
所以一般的定义Stream是这样的:
提供字节序列的通用视图。
和StreamWriter:
实现一个 TextWriter,用于以特定编码将字符写入流。
所以BaseStream属性是字符将被写入的位置。这可能是 aFileStream或 aMemoryStream或任何其他实现Stream. 我觉得更好的描述是:
获取底层流。
我认为它适用于“菊花链”流。
例如,您的代码写入流 A,流 A 写入流 B,流 B 写入流 C,流 C 写入磁盘。
在这种情况下,流 A 的基本流是 B。