我需要存储大数据(以千兆字节为单位)以使用 protobuf-net 2.4.0 进行流式传输。
目前,我使用的策略是使用 PrefixStyle.Base128 编写带有 LengthPrefix 的小标头,并使用以下代码使用标准 protobuf 序列化方法编写大主体,它的工作原理非常神奇。
private void Serialize(Stream stream)
{
Model.SerializeWithLengthPrefix(stream, FileHeader, typeof(FileHeader), PrefixStyle.Base128, 1);
if (FileHeader.SerializationMode == serializationType.Compressed)
{
using (var gzip = new GZipStream(stream, CompressionMode.Compress, true))
using (var bs = new BufferedStream(gzip, GZIP_BUFFER_SIZE))
{
Model.Serialize(bs, FileBody);
}
}
else
Model.Serialize(stream, FileBody);
}
Run Code Online (Sandbox Code Playgroud)
现在我需要将主体拆分为 2 个不同的对象,因此我也必须对它们使用 LengthPrefix 方法,但我不知道在这种情况下最好的PrefixStyle是什么。我可以继续使用Base128吗?Fix32描述中的“对兼容性有用”是什么意思?
更新
我发现这篇文章Marc Gravell 解释说可以选择使用开始标记和结束标记,但我不确定它是否可以与 LengthPrefix方法一起使用。更清楚地说,下面代码中显示的方法是否有效?
[ProtoContract]
public class FileHeader
{
[ProtoMember(1)]
public int Version { …Run Code Online (Sandbox Code Playgroud) 找出devDept Eyeshot中加载的两个三维形状差异的最佳算法是什么?
我已经在 Eyeshot 中从 CAD 文件加载了两个形状,并希望突出显示形状的差异。
提前致谢。