我想在类上实现一个名为 ReadToEnd 的扩展方法Windows.Storage.Streams.DataReader。这应该基本上读取流上的所有可用数据,如 System.IO.StreamReader。
尝试尽可能轻松地移植我的不兼容 WinRT 代码。
我不确定如何实现这一目标,或者是否有可能。
我想在类上实现一个名为 ReadToEnd 的扩展方法Windows.Storage.Streams.DataReader。这应该基本上读取流上的所有可用数据,如 System.IO.StreamReader。
尝试尽可能轻松地移植我的不兼容 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);
}
}