0

我有以下伪代码:

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。

谢谢

4

2 回答 2

0

我让它工作了......我必须在 RMI 消息中包含一个 typeID 字段。然后,我可以获取 typeID 并将其解析为消息生成器,然后从部分构建的消息的字节中合并。

于 2011-03-30T23:23:28.473 回答
0

任何您不能调用build()、获取Message并以正确格式(例如toString())发送的任何原因。在另一端,您可以将其充气回 a Message,并在需要时将其重新放入 builder 中toBuilder()

您也可以将消息转换为二进制格式并发送。

也许我误解了——ProtocolBuffers 的全部意义在于将Messages 转换为有线表示,所以有很多方法可以做到这一点(其中大多数要么被包装成要么Serializable被简单地包装成。)

于 2011-03-30T21:40:23.297 回答