有沒有辦法讓StreamReader保持緩衝?無緩衝StreamReader
我正在嘗試處理可能是二進制或文本的進程的輸出。輸出將看起來像一個HTTP響應,例如
Content-type: application/whatever
Another-header: value
text or binary data here
我想要做的是解析使用StreamReader
頭,然後無論是從它的BaseStream
或StreamReader
讀取處理內容的其餘部分。這裏基本上是我開始的:
private static readonly Regex HttpHeader = new Regex("([^:]+): *(.*)");
private void HandleOutput(StreamReader reader)
{
var headers = new NameValueCollection();
string line;
while((line = reader.ReadLine()) != null)
{
Match header = HttpHeader.Match(line);
if(header.Success)
{
headers.Add(header.Groups[1].Value, header.Groups[2].Value);
}
else
{
break;
}
}
DoStuff(reader.ReadToEnd());
}
這似乎是垃圾二進制數據。所以我改變了最後一行是這樣的:
if(headers["Content-type"] != "text/html")
{
// reader.BaseStream.Position is not at the same place that reader
// makes it looks like it is.
// i.e. reader.Read() != reader.BaseStream.Read()
DoBinaryStuff(reader.BaseStream);
}
else
{
DoTextStuff(reader.ReadToEnd());
}
...但StreamReader的緩衝器的輸入,所以reader.BaseStream是在錯誤的位置。有沒有一種方法來取消緩衝StreamReader?或者我可以告訴StreamReader將流重置回StreamReader所在的位置?
馬特 - 你能否詳細說明「StreamReader一次讀取塊,所以reader.BaseStream處於錯誤的位置。」 – jro 2009-02-06 16:55:37
希望這更清晰。 – 2009-02-06 17:36:01