[英]ProtoBuf-Net to do raw read
我想要一個簡單的代碼,它將遍歷協議緩沖區的隨機流,並在不明確了解結構內容的情況下打印出內容。 在while循環內相當於XmlReader.Read()的東西
using (ProtoBuf.ProtoReader protoReader =
new ProtoBuf.ProtoReader(stream1, null,
new ProtoBuf.SerializationContext { }))
{
protoReader.ReadFieldHeader();
while (protoReader.WireType != ProtoBuf.WireType.None)
{
switch (protoReader.WireType)
{
case ProtoBuf.WireType.Fixed64:
Console.WriteLine(protoReader.ReadInt64());
break;
case ProtoBuf.WireType.Fixed32:
Console.WriteLine(protoReader.ReadInt32());
break;
case ProtoBuf.WireType.StartGroup:
Console.WriteLine(protoReader.ReadInt32());
break;
default:
Console.WriteLine(protoReader.WireType);
break;
}
}
}
但是我不知道如何將協議緩沖區前進到下一個元素。 在我的測試中,它一直返回“ StartGroup”,並且永遠不會前進。 如何前進到信息流中的下一個元素?
ReadFieldHeader()
應該在循環內:
while(protoReader.ReadFieldHeader() > 0)
{
//...
}
注意:如果您不知道如何處理給定的字段,則可以使用.SkipField()
方法來正確讀取數據-例如:
default:
Console.WriteLine(protoReader.WireType);
protoReader.SkipField();
break;
您必須每個字段標題僅讀取或跳過一次數據。
對於組和子項,您需要使用StartSubItem
等:
var tok = ProtoReader.StartSubItem(protoReader);
// an inner while-loop, etc
ProtoReader.EndSubItem(tok);
或者:使用SkipField()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.