WinRT - 从IInputStream一次读取一个字节,直到遇到特定字节

时间:2012-11-29 18:27:55

标签: c# windows-runtime

我有一个IInputStream我想要读取数据,直到我遇到某个字节,此时我会将IInputStream传递给其他对象以使用其余的流。< / p>

这就是我想出来的:

public async Task HandleInputStream(IInputStream instream)
{
    using (var dataReader = new DataReader(instream))
    {
        byte b;
        do
        {
            await dataReader.LoadAsync(1);
            b = dataReader.ReadByte();

            // Do something with the byte
        } while (b != <some condition>);

        dataReader.DetachStream();
    }
}

似乎一次只能为一个字节运行LoadData会非常慢。我的困境是,如果我选择一个缓冲区大小(如1024)并加载它,并且我的值显示10个字节,那么这个方法将有下一个1014字节的数据,并且必须将它传递给下一个方法进行处理

有没有更好的方法来解决这个问题,或者这是一个可接受的解决方案?

1 个答案:

答案 0 :(得分:2)

如果您要查找的值离流的开头不太远,那么这种读取速度应该不会那么慢。你期待它到流的多远?你测试了性能吗?

根据您使用的流类型,您可以使用其他方法:

  • 如果它支持向后搜索(例如,您正在从文件中读取),只要您知道找到了您的值的偏移量,就可以一次读取更大的块。然后,您可以在将其移交之前进入该位置。
  • 如果不可能,您可以创建另一个中间内存流,您将复制已读取的缓冲区的剩余部分,然后是流的其余部分。即使你不能向后寻求,这也有效。如果流太大,唯一的问题可能是内存消耗。