当前位置: 首页 > 知识库问答 >
问题:

protobuf网络流对象来自磁盘

姚俊材
2023-03-14

假设我有一个非常大的对象集合(数百万个),这些对象是根据proto-wire格式序列化的。是否可以从文件中流式处理这些项目?我尝试将对象序列化为列表

我怀疑解决方案需要我知道每个序列化项的大小,然后从流中读取该大小,并将该字节跨度传递给protobuf序列化程序进行反序列化。我想确保没有一种更简单的机制来完成这项任务,这种机制不需要了解每个对象实例中可能不同的单个项目的长度。

我的另一个想法是在流中包含每个即将到来的对象的大小作为它自己的对象,例如:

0:第一个对象的元信息,包括字节中的类型/长度1:在0中定义的对象2:第二个对象的元信息,包括字节中的类型/长度3:在2中定义的对象4:。。。等

版本信息:我目前使用的是dotnet core 3.1和protobuf net版本2.4.4

共有1个答案

乐正瑞
2023-03-14

在protobuf中,根对象在默认情况下不会终止,其目的是允许“merge”=“append”。这与您描述的非常常见的场景相冲突。幸运的是,出于这个原因,许多库提供了一种机制来编码对象之前的长度。您要查找的是SerializeWithLengthPrefix和反序列化WithLengthPrefix方法。

 类似资料:
  • 我目前正在使用自定义JWT身份验证进行SpringCloudGateway。身份验证后,我希望使用GlobalFilter将标头中的JWT令牌字符串传递到下游服务: JWT令牌字符串可以通过调用主体来获得。getName(); 我的问题是:我如何实现

  • 问题内容: 我到处都在搜寻,但似乎找不到清晰的答案… 服务器(我的问题是glassfish)注入用@Context注释的实际objets的机制是什么?更具体地说,如果我想编写一个类似以下内容的类: 那我该怎么办呢?实例化MyObject的位置在哪里,由谁执行,如何执行? 编辑:我看过类似以下内容: 在JAX-RS中使用@ Context,@Provider和ContextResolver http

  • 我阅读了有关通过网络发送序列化对象的好处的文章。性能和尺寸成本。 有些解释了DataContract和使用JSON或XML序列化。 但是我找不到关于如果我不使用这些属性会发生什么的文章,并且我返回一个对象,假设我的对象的属性和状态是基本类型。显然,当我具体使用DataContractJsonSerializer之类的序列化程序及其WriteObject方法时,它会抛出一个异常。 例如,如果我在We

  • 问题内容: (对不起,还有很长的问题!)我最近一直在尝试将Go(而不是C ++)用于我作为辅助项目正在开发的游戏服务器模拟器,并质疑我是否以明智的Go术语来实现它。如您所料,服务器通过发送符合特定协议规范的原始数据包(TCP)与一个或多个游戏客户端进行通信。相关部分如下所示: 接收标头->解密->接收字节,直到达到标头长度->解密其余数据包->分派给处理程序->解码数据包->根据需要处理->发送响

  • 问题内容: 我只想从Web应用程序中使用PHP发送SMS。谁能告诉我该怎么做?我需要为此做些什么? 问题答案: 我不知道这是否适用于您,但是为了省钱我做了很多次,就是在个人资料中询问用户他的载体是什么,然后尝试与匹配。本质上,许多运营商/大多数运营商都将电子邮件地址连接到电话号码,您可以轻松地将短信发送到该号码。例如,如果您拥有ATT,并且电话号码是786-262-8344,则发送至7682628

  • 问题内容: 我可以在Java监视程序上创建网络流量吗?该程序必须控制从计算机程序(包括OS模块)到网络驱动程序再返回的所有网络流量。如果是,如何? 注意: 我不仅要监视流量,还要对其进行控制。我想在Windows NT上实现这样的系统。仅靠Java无法实现它。如何在JNI的帮助下执行它? 也许是另一个变体。我不熟悉Windows服务,但仍然如此。我将在C 上编写一个程序并将其注册为Windows服