我在数据库单元格中将一系列 protobuf-net 对象保存为以长度为前缀的 protobuf-net 对象的 Byte[]:
//retrieve existing protobufs from database and convert to Byte[]
object q = sql_agent_cmd.ExecuteScalar();
older-pbfs = (Byte[])q;
// serialize the new pbf to add into MemoryStream m
//now write p and the new pbf-net Byte[] into a memory stream and retrieve the sum
var s = new System.IO.MemoryStream();
s.Write(older-pbfs, 0, older-pbfs.Length);
s.Write(m.GetBuffer(), 0, m.ToArray().Length); // append new bytes at the end of old
Byte[] sum-pbfs = s.ToArray();
//sum-pbfs = old pbfs + new pbf. Insert sum-pbfs into database
这工作正常。我担心的是如果有轻微的数据库损坏会发生什么。将不再可能知道哪个字节是长度前缀,并且必须丢弃整个单元格内容。是否建议也使用某种类型的 pbf 对象结束指示符(有点像文本文件中使用的 \n 或 EOF 指示符)。这样,即使一条记录损坏,其他记录也可以恢复。
如果是这样,在每个 pbf 末尾添加记录结束指示符的推荐方法是什么。
在 Visual Studio 2010 上使用 protobuf-netv2 和 C#。
谢谢马尼什