2017-02-02 9 views
2

私はいくつかのテストをしています。ストリームを交換するには、通常はWebリクエストから作成したストリームを使用します。読み込み可能なストリームを作成するにはどうすればよいですか?

私はこのような流れの作成:私のコードは、それを消費しようとしたときしかし

MemoryStream responseDataStream = new MemoryStream(); 

using (StreamWriter sw = new StreamWriter(responseDataStream)) 
{ 
    sw.Write(responseData); 
    sw.Flush(); 
    sw.Close(); 
} 

を:

StreamReader reader = new StreamReader(myStream);

私は私の準備をしたいエラーにStream was not readable.

を取得ストリームが消費される準備が整うようにします。これどうやってするの?

+1

読み込み前に 'stream.Position = 0;'を設定してみてください。 –

答えて

5

デフォルトでは、StreamWriterは、コンストラクタで渡すストリームの所有権を取得します。ストリームライターが閉じられると、ストリームライターも閉じます。コンストラクタの異なるオーバーロードを使用する必要があります(例: new StreamWriter(responseDataStream, Encoding.UTF8, true)

第2に、ストリームはまだ最後の書き込みの位置にあります。巻き戻す必要があります:

responseDataStream.Position = 0; 
+0

メモリストリームが閉じられたときに、ストリームストリームを書き込んだ後、ストリームライタを閉じたので、それはただエーテルに消えますか? – NibblyPig

+0

@NibblyPigいいえ、それは閉鎖されています。 'ToArray'を呼び出すことができます(これはメモリストリームの最も一般的な使用例です - バイト配列へのストリームの読み込み、またはその逆)。しかし他の多くのことは禁止されています。これは外国の概念ではありません - あなたがソケットを閉じるなら、確かにそれがまだデータを受け取ることを期待していない:) – Luaan

+0

あなたの答えと説明のためにクール、ありがとう:) – NibblyPig

関連する問題