【发布时间】:2012-09-12 22:34:37
【问题描述】:
我正在使用 protobuf-csharp-port,我需要能够记录一些 protobuf 消息以供以后重播。 XML 对我来说是理想的,但我很灵活,只要有人可以进入文件,进行更改,然后重播文件中的消息。
使用此 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 消息?
【问题讨论】:
标签: c# protocol-buffers