java - 将 byte[] 解析回 Protocol Buffer 消息实例时出现 RuntimeException! (反序列化)

标签 java protocol-buffers

我尝试了以下代码进行编码和解码。

但是从 byte[] 解码失败。

代码:-

public static void test(){

    Comment comment = Comment.newBuilder()
            .setCommentBody("This is 1st comment")
            .build();
    byte[] bytes = comment.toByteArray();

    try {
        Comment c = Comment.parseFrom(bytes);
    }
    catch (InvalidProtocolBufferException ex) {
        Logger.getLogger(testing.class.getName()).log(Level.SEVERE, null, ex);
    }

异常详细信息:-

    Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
    at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java)
    at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:153)
    at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:709)
    at paratha.serializers.protocolbuffers.CommentProto$Comment.parseFrom(CommentProto.java:186)

最佳答案

您是否自己构建了 Protocol Buffer?或者也许 Comment 本身没有正确编译?

这看起来像是 Eclipse 构建的代码在编译出现错误时抛出的异常,但无论如何它都会构建类文件。它可以让您运行损坏的代码,直到到达实际损坏的位,此时您会得到这样的异常。

关于java - 将 byte[] 解析回 Protocol Buffer 消息实例时出现 RuntimeException! (反序列化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196019/

相关文章:

qt - 如何可视化来自谷歌 Protocol Buffer 的数据?

java - WildFly 应用程序开发 : how to reflect the runtime classpath at development time?

java - 如何读取文本文件中行列表的位置

java - 如何拦截对 Java 或 Android 中的库类的方法调用?

switch 语句的 Java 扩展枚举

c# - 将 protoBuf-net 消息序列化为流 c# - 出现错误 "Only data-contract classes can be processed"

java - 在循环中填充 map 时,转换为 (Float) 还是声明一个新的 Float 更好?

c++ - 将 Protocol Buffer 定义拆分为多个 .proto 文件

protocol-buffers - gson vs Protocol Buffer

go - 在 protobuf 中封装 float64 的包