我有以下pesudocode:
public void sendPB(ObjectId userId, Message.Builder mb) {
if (userId is logged in to server) {
set mb.ackId to random chars
lookup socket and send mb.build()
}
else {
forward message to user's server via RMI
}
}
问题是Message.Builders没有实现Serializable,所以你不能通过RMI直接发送它。
有一种简单的方法吗?
我尝试从构建器构建部分PB并将其发送过来,但为了重建它,您需要知道类型或描述符。 Descriptor也没有实现Serializable。
由于
答案 0 :(得分:0)
您无法致电build()
,获取Message
,并以正确的格式发送(例如toString()
)。在另一端,您可以将其充气回Message
,如果需要,则将其重新设置为toBuilder()
的构建器。
您也可以将邮件转换为二进制格式并发送。
也许我误解了 - ProtocolBuffers的重点是让Message
成为线表示,因此有很多方法可以做到(大多数都是Serializable
或者简单地包裹着。)
答案 1 :(得分:0)
我让它工作了......我必须在RMI消息中包含一个typeID字段。然后,我可以获取typeID并将其解析为Message Builder,然后mergeFrom部分构建的消息的字节。