0

我想在类上实现一个名为 ReadToEnd 的扩展方法Windows.Storage.Streams.DataReader。这应该基本上读取流上的所有可用数据,如 System.IO.StreamReader。

尝试尽可能轻松地移植我的不兼容 WinRT 代码。

我不确定如何实现这一目标,或者是否有可能。

4

1 回答 1

0

设法写了一些东西,给了我我需要的东西。

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);
    }
}
于 2013-01-06T09:26:44.283 回答