3

私はStreamWriter今日について読んでいて、このプロパティに出くわしました、BaseStream

私は定義を探していて、これを見つけました

「バッキングストアとインターフェイスする基になるストリームを取得します。」

ここからMSDN-StreamWriter.BaseStream

BaseStreamの定義が非常に単純であるため、StreamReaderのBaseStreamが何であるかを理解しています。

基になるストリームを返します。

しかし、StreamWriter.BaseStreamの定義はどういう意味ですか?もっと明確に言えば、定義のこの部分は「バッキングストアとのインターフェース」とはどういう意味ですか?それは私にはぎこちないように聞こえます。

4

3 に答える 3

2

したがって、の一般的な定義Streamは次のとおりです。

バイトシーケンスの一般的なビューを提供します。

およびStreamWriter

特定のエンコーディングでストリームに文字を書き込むためのTextWriterを実装します。

したがって、BaseStreamプロパティは文字が書き込まれる場所です。これは、を実装するaFileStreamまたはaまたはその他のものである可能性があります。より良い説明は次のようになります。MemoryStreamStream

基になるストリームを取得します。

于 2011-01-11T02:22:12.793 に答える
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);
}

于 2011-01-11T02:29:15.050 に答える
0

ストリームを「デイジーチェーン」するときのためだと思います。

たとえば、コードはストリームAに書き込み、ストリームBに書き込み、ストリームCに書き込み、ディスクに書き込みます。

その場合、ストリームAのベースストリームはBです。

于 2011-01-11T02:22:42.843 に答える