2017-02-02 1 views
2

몇 가지 테스트를하고 있는데, 일반적으로 내가 만든 스트림으로 웹 요청에서 오는 스트림을 교체합니다.읽을 수있는 스트림을 만들려면 어떻게해야합니까?

나는이 같은 스트림을 생성 : 내 코드를 시도 할 때

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).

두 번째로 스트림은 여전히 ​​마지막 쓰기 위치에 있습니다. 되감기해야합니다 :

responseDataStream.Position = 0; 
+0

메모리 스트림을 닫았을 때 스트림 스트림 작성기를 닫았으므로 스트림이 사라지고 그냥 에테르로 사라질까요? – NibblyPig

+0

@NibblyPig 아니요.하지만 닫혔습니다. 여전히 ToArray를 호출 할 수 있습니다. (이것은 메모리 스트림의 가장 일반적인 사용 예입니다. 바이트 배열로 스트림을 읽거나 그 반대로 읽는 것) 대부분의 다른 것들은 금지되어 있습니다. 이것은 외계인의 개념이 아닙니다. 소켓을 닫으면, 여전히 데이터를받을 수있을 것이라고 기대하지 않을 것입니다. :) – Luaan

+0

멋진 답변과 설명을 주셔서 감사합니다 :) – NibblyPig

관련 문제