0
我想在Windows.Storage.Streams.DataReader
類上實現名爲ReadToEnd的擴展方法。這應該基本上讀取流中的所有可用數據,如System.IO.StreamReader。StreamSocket DataReader ReadToEnd擴展方法
試圖使我的非兼容WinRT代碼移植儘可能簡單。
我不知道如何實現這個目標,或者甚至可能。
我想在Windows.Storage.Streams.DataReader
類上實現名爲ReadToEnd的擴展方法。這應該基本上讀取流中的所有可用數據,如System.IO.StreamReader。StreamSocket DataReader ReadToEnd擴展方法
試圖使我的非兼容WinRT代碼移植儘可能簡單。
我不知道如何實現這個目標,或者甚至可能。
管理寫給我的東西,我需要什麼。
internal static string ReadLine(this DataReader stream, ref int maxLength, Encoding encoding, char? termChar)
{
var maxLengthSpecified = maxLength > 0;
int i;
byte b = 0, b0;
var read = false;
using (var mem = new MemoryStream())
{
while (true)
{
b0 = b;
i = stream.ReadByte();
if (i == -1) break;
else read = true;
b = (byte)i;
if (maxLengthSpecified) maxLength--;
if (maxLengthSpecified && mem.Length == 1 && b == termChar && b0 == termChar)
{
maxLength++;
continue;
}
if (b == 10 || b == 13)
{
if (mem.Length == 0 && b == 10)
{
continue;
}
else break;
}
mem.WriteByte(b);
if (maxLengthSpecified && maxLength == 0)
break;
}
if (mem.Length == 0 && !read) return null;
return encoding.GetString(mem.ToArray(), 0, (int)mem.Length);
}
}
'System.IO.Stream'沒有'ReadToEnd()'方法。你在談論'System.IO.TextReader.ReadToEnd()'嗎?另外爲什麼在你的問題標題中有'StreamSocket'?這與你的問題有什麼關係? –
嗨達林。你是對的。相應的推薦問題。關於StreamSocket,我引用它,因爲您通常將DataReader與此結合使用。有希望的是,已經與StreamSocket一起工作過的開發人員會有一個解決方案,因爲他們可能做了類似的事情。 – c0D3l0g1c
當你正在處理具有「ReadToEnd」操作的網絡流沒有任何意義。如果沒有更多數據可用,並且代碼將掛起,則來自套接字的讀取將會被阻止。通常當你處理套接字時,你正在使用一些基於TCP的協議,例如HTTP。每個協議都應該有一個方法來指定有多少數據可用於讀取,否則客戶端將不知道要讀取多少數據,並且如果他試圖讀取更多數據將會掛起。例如,在HTTP協議中,服務器通過「Content-Length」響應頭來表明這一點。 –