我有用于记录数据的协议缓冲区. message Message { required double val1 = 1; optional int val2 = 2;}message BigObject { repeated Message message = 1;} 我每秒收到一条消息.它们使用我的BigObject存储在内存中,并用
message Message {
required double val1 = 1;
optional int val2 = 2;
}
message BigObject {
repeated Message message = 1;
}
我每秒收到一条消息.它们使用我的BigObject存储在内存中,并用于执行某些任务.但与此同时,我希望将这些消息存储在文件中,以便在应用程序崩溃时进行备份.每次简单编写BigObject都会浪费时间.而且我试图找到自上次写入文件以来只写入添加的消息的方法.有办法吗?
Protobuf是一种可附加的格式,您的布局非常适合这种情况.只需打开位于末尾的文件,然后从新的(空)BigObject开始.只添加/序列化新的Message实例,并写入文件(从最后开始).现在,如果您从头开始解析文件,您将获得一个包含所有Message实例(旧的和新的)的BigObject.
你实际上可以通过记录每个消息到达时记录它,只要你每次都将它包装在一个BigObject中,即伪代码
loop {
msg = await NextMessage();
wrapper = new BigObject();
wrapper.Messages.Add(msg);
file = OpenFileAtEnd();
wrapper.WriteTo(file);
file.Close();
}
