我有用于记录数据的协议缓冲区. 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(); }