क्या स्ट्रीमरडर को किसी भी बफरिंग से रखने का कोई तरीका है?Unbuffered 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 unbuffer करने का कोई तरीका है? या क्या स्ट्रीम स्ट्रीमर स्ट्रीम स्ट्रीमर को स्ट्रीम रीडर रीसेट करने के लिए कह सकता हूं?
मैट - क्या आप "स्ट्रीमर रीडर एक समय में ब्लॉक पढ़ते हैं, इसलिए पाठक। बेसस्ट्रीम गलत स्थिति में है।" – jro
उम्मीद है कि यह स्पष्ट है। –