【发布时间】:2015-07-28 21:07:04
【问题描述】:
在处理 XML 时,如何确定我已经处理了多少数据,无论是字节还是字符?如果底层流是FileStream,那就很容易了。我该如何使用底层NetworkStream?
性能和内存考虑非常重要。
NetworkStream reportStream = GetStream();
using (var bufferStream = new BufferedStream(reportStream))
{
using (var xmlTextReader = new XmlTextReader(bufferStream))
{
while (xmlTextReader.Read())
{
// TODO check how much data have been read already
// bufferStream.Position and bufferStream.Length don't work
// because NetworkStream doesn't support them by design
// process XML data
}
}
}
【问题讨论】:
-
将流包装成另一个并计数?
-
Read():从流中读取下一个节点。 -
谢谢,@AlexeiLevenkov
-
它与您的用例没有直接关系(除非您知道您的输入是线性化的!)但值得注意的是 XmlTextReader 实现了 IXmlLineInfo msdn.microsoft.com/en-us/library/… 这可以让您获得当前位置采用 Line / Char (on line) 格式,这可能对未来搜索此问题的人有用。
-
谢谢,@tolanj。我曾考虑过这种方法,但意识到由于每行的长度不统一,因此在跟踪大小方面需要大量开销。
标签: c# .net networkstream xmltextreader