我正在使用ProtoWriter / ProtoReader类来实现与Protobuf-net源包含的DataTableSerializer类似的东西。一个区别是在表内容的初始传输之后,所有将来的更新都是逐步序列化的。
目前我没有处理ProtoWriter实例,直到程序结束(因为我希望所有未来的更新都使用同一个编写器进行序列化)。这样可以延迟对输出流的所有写入,直到达到1024字节的内部缓冲区大小。
我应该为每次增量更新创建一个新的ProtoWriter吗?有没有其他方法可以强制写入者写入流?
示例代码:
private readonly ProtoWriter _writer;
private void WriteUpdate(IEnumerable<IReactiveColumn> columns, int rowIndex)
{
// Start the row group
ProtoWriter.WriteFieldHeader(ProtobufOperationTypes.Update, WireType.StartGroup, _writer);
var token = ProtoWriter.StartSubItem(rowIndex, _writer);
var rowId = rowIndex;
// Send the row id so that it can be matched against the local row id at the other end.
ProtoWriter.WriteFieldHeader(ProtobufFieldIds.RowId, WireType.Variant, _writer);
ProtoWriter.WriteInt32(rowId, _writer);
foreach (var column in columns)
{
var fieldId = _columnsToFieldIds[column.ColumnId];
WriteColumn(column, fieldId, rowId);
}
ProtoWriter.EndSubItem(token, _writer);
}
答案 0 :(得分:1)
有趣的问题。 flush方法没有暴露,因为内部并不总是适合刷新,但我想没有一个很大的理由不暴露这个并且让它没有操作。另一方面: