我正在使用protobuf-csharp-port,並且需要記錄稍後重播的一些protobuf消息的功能。 XML對我來說是理想的,但只要人能夠進入文件,進行更改,然後重播文件中的消息,我就很靈活。使用帶有protobuf-csharp端口的文件記錄並重放可讀的protobuf消息
使用此C#代碼:
MyRequest req =
MyRequest.CreateBuilder().SetStr("Lafayette").Build();
using (var stringWriter = new StringWriter())
{
var xmlWriterSettings = new XmlWriterSettings
{
ConformanceLevel = ConformanceLevel.Fragment
};
var xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSettings);
ICodedOutputStream output = XmlFormatWriter.CreateInstance(xmlWriter);
req.WriteTo(output);
output.Flush();
string xml = stringWriter.ToString();
using (var streamWriter = new StreamWriter(@"Requests.txt"))
{
streamWriter.WriteLine(xml);
streamWriter.WriteLine(xml);
streamWriter.WriteLine(xml);
}
}
我產生含有Requests.txt文件:
<str>Lafayette</str>
<str>Lafayette</str>
<str>Lafayette</str>
然而,當我嘗試將其反序列化回用:
var xmlReaderSettings = new XmlReaderSettings
{
ConformanceLevel = ConformanceLevel.Fragment
};
using (var xmlReader = XmlReader.Create(@"Requests.txt", xmlReaderSettings))
{
ICodedInputStream input = XmlFormatReader.CreateInstance(xmlReader);
MyRequest reqFromFile;
while(!input.IsAtEnd)
{
reqFromFile =
ReverseRequest.CreateBuilder().MergeFrom(input).Build();
}
}
只有一個MyRequest
被反序列化,另外兩個被忽略。 (後reqFromFile
建成,input.IsAtEnd == true
。)
所以,回到我的問題:是有一些方法可以從文件中讀取多個人類可讀的protobuf的消息?
有趣。如果我們使用Java,我會試圖更仔細地看。 – OmniJeff