【问题标题】:Protobuf - toByteArray method not there on my classProtobuf - 我的课堂上没有 toByteArray 方法
【发布时间】:2018-10-03 23:35:15
【问题描述】:

首先,是的,我已经阅读了这个帖子,Protobuf - Missing toByteArray()?,它并没有解决我的问题。

我按照此处描述的确切步骤安装了 protobuf:https://gist.github.com/sofyanhadia/37787e5ed098c97919b8c593f0ec44d8

我的 proto 文件很简单:

syntax = "proto3";
package com.mypackage.protobuf;

message MensajeSMS {
  string telefono = 1;
  string mensaje = 2;
}

我去我的原型路线并使用以下方法对其进行原型编译:

protoc --java_out=/home/myhome/myproject/myprotoclass/ MensajeSMS.proto 

类确实创建了,它有几个方法,但这里没有全部指定:https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/MessageLite

就像有些人说的那样:

“toByteArray() 方法肯定存在,因为它在 Message 接口中为所有消息类型定义: https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/MessageLite.html"

这里说: https://github.com/google/protobuf/issues/2643

所以,我显然做错了什么。如何使 protoc 使用 toByteArray 方法生成我的类?

编辑

代码如下:

MensajeSMS xxx = MensajeSMS.newBuilder()
                            .setTelefono(mensajeSMS.getTelefono())
                            .setMensaje(mensajeSMS.getMensaje())
                            .build();

byte[] mybyte = xxx.toByteArray(); //Here I get cannot resolve method

【问题讨论】:

  • 能否在您使用 proto 的地方添加代码以及收到的错误消息?
  • 已编辑以添加出现错误的代码。 @Luc

标签: protocol-buffers


【解决方案1】:

所以,我找到了答案,它与代码无关。确实需要更多数据,我认为我所做的其他一切都无关紧要。

问题是我正在将我的项目编译成一个 jar 并在另一个项目中使用它,但我正在使用

./gradlew build 

而不是

./gradlew buidl fatJar 

这是我需要在我的 jar 中包含所有依赖项的内容。

我只是希望这对其他人有所帮助。我的错。

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 2012-08-11
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2011-10-19
    相关资源
    最近更新 更多