Gibt es eine Möglichkeit, StreamReader von einer Pufferung abzuhalten?Unbuffered StreamReader
Ich versuche, Ausgabe von einem Prozess zu behandeln, der binär oder Text sein kann. Die Ausgabe wird wie eine HTTP-Antwort aussehen, z.
Content-type: application/whatever
Another-header: value
text or binary data here
Was ich tun möchte, ist die Header analysieren eine StreamReader
verwenden, und dann lesen Sie entweder von seinem BaseStream
oder StreamReader
den Rest des Inhalts zu behandeln. Hier ist im Grunde, was ich angefangen habe:
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());
}
Dies scheint Binärdaten zu löschen. Also änderte ich die letzte Zeile in etwa so:
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());
}
... aber Stream puffert seine Eingabe, so reader.BaseStream in der falschen Position. Gibt es eine Möglichkeit, StreamReader zu entpacken? Oder kann ich StreamReader anweisen, den Stream wieder dahin zurückzusetzen, wo StreamReader ist?
Matt - können Sie näher ausführen "Stream liest Blöcke zu einer Zeit, so reader.BaseStream in der falschen Position" – jro
hoffentlich ist das klarer. –