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

python和java中protobuf序列化的区别是什么?

蓝泰平
2023-03-14

我尝试使用java和python protobuf序列化方法,例如

在python中,api是

SerializeToString

在java中,api是

toByteArray

结果是一样的吗?如果不是,如何将java结果转换为python结果?

共有1个答案

子车海
2023-03-14

不同命名的原因是由于这些语言的约定:

>

  • 在Python 2中,字符串(str)是一系列字节,因此SerializeToString。在Python 3中,字节字符串具有bytes类型,但名称被保留。

    在Java中,返回的值是一个byte[],因此名称toByteArray是有意义的。

    然而,尽管API存在差异,protobuf序列化格式“在线”(或磁盘)在语言和平台之间完全兼容:

    同样的消息可以通过用任何支持的编程语言编写的代码来读取。您可以让一个平台上的Java程序从一个软件系统中捕获数据,基于. proto定义对其进行序列化,然后在另一个平台上运行的单独Python应用程序中从序列化的数据中提取特定值。

  •  类似资料:
    • 本文向大家介绍Java中的序列化和外部化之间的区别,包括了Java中的序列化和外部化之间的区别的使用技巧和注意事项,需要的朋友参考一下 序列化和外部化都是将对象转换为流字节并将字节流存储在数据库或内存中的过程。实现java.io.Serializable接口的类可以序列化。另一方面,根据应用程序的要求,外部化用于自定义序列化。外部化扩展了java.io.Serializable。  序号 键 序列

    • 本文向大家介绍Java中的序列化是什么?,包括了Java中的序列化是什么?的使用技巧和注意事项,需要的朋友参考一下 Java提供了一种称为对象序列化的机制,该机制可以将对象表示为字节序列,其中包括对象的数据以及有关对象的类型和存储在对象中的数据类型的信息。 示例

    • 对于基本类型,==比较的是值; 对于引用类型,==比较的是地址; equals不能用于基本类型的比较; 如果没有重写equals,equals就相当于==; 如果重写了equals方法,equals比较的是对象的内容;

    • (1)队列先进先出,栈先进后出。 (2)遍历数据速度不同。 栈只能从头部取数据 也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性; 队列则不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多。

    • 如题目所述,想请教一下大佬们在Java中序列化与反序列化的意义是什么,如何理解Java的序列化和反序列化?

    • 我需要通过flink消费Kafka,不幸的是,Kafka消息是在serde中使用原型,完全不知道如何处理它,这里是来自互联网的代码,但我不能使它工作。 这不起作用,它会让NPE: 有人知道我做错了什么吗?使用twitter ProtobufSerializer是唯一值得拥有protobuf的方法吗?还是还有别的路要走?