有没有办法让 StreamReader 不做任何缓冲?
我正在尝试处理来自可能是二进制或文本的进程的输出。输出看起来像一个 HTTP 响应,例如
Content-type: application/whatever
Another-header: value
text or binary data here
我想要做的是使用 a 解析标头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 所在的位置吗?