有没有一种方法可以预先读取一行以测试下一行是否包含特定标签数据?
我正在处理具有开始标签但没有结束标签的格式。
我想读一行,将其添加到结构中,然后测试下面的行,以确保它不是一个新的“节点”,如果它不关闭该结构并创建一个新的节点,则不继续添加
我能想到的唯一解决方案是让两个流读取器同时运行,同时沿锁定步骤缓慢移动,但这似乎很浪费(如果它甚至可以工作)
我需要类似偷看但偷看的东西
最佳答案
问题在于根本的流甚至可能无法找到。如果您看一下流阅读器的实现,它会使用缓冲区,以便即使无法查找流也可以实现TextReader.Peek()。
您可以编写一个简单的适配器来读取下一行并在内部对其进行缓冲,如下所示:
public class PeekableStreamReaderAdapter
{
private StreamReader Underlying;
private Queue<string> BufferedLines;
public PeekableStreamReaderAdapter(StreamReader underlying)
{
Underlying = underlying;
BufferedLines = new Queue<string>();
}
public string PeekLine()
{
string line = Underlying.ReadLine();
if (line == null)
return null;
BufferedLines.Enqueue(line);
return line;
}
public string ReadLine()
{
if (BufferedLines.Count > 0)
return BufferedLines.Dequeue();
return Underlying.ReadLine();
}
}