我有一个原始文件,其中包含一些消息的定义。我在原始文件的开头声明了
package com.myorganization
。例如,该文件中有 message A
声明。如果我序列化该消息,该消息的接收者具有相同的 message A
定义,但它驻留在不同的包和不同的原型文件中,并且可能使用不同的语言。接收器会反序列化吗message A
?
如果两个消息定义相同,那么可以。字段编号匹配很重要;如果字段名称不同,那么就二进制格式而言,这实际上并不重要。
重要的一个地方是该消息是否封装在
Any
消息中。 Any
消息的序列化为:
Any 包含任意序列化消息作为字节,以及充当该消息类型的全局唯一标识符并解析为该消息类型的 URL
给定消息类型的默认类型 URL 为
type.googleapis.com/_packagename_._messagename_
因此,如果阅读器没有相同的包名称,那么它将无法找到适当的消息来解码
Any
有效负载。我相信您可以使用自定义消息查找来配置阅读器,但机制和功能因实现而异。