簡體   English   中英

ProtoBuf-Net進行原始讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM