Java:协议缓冲区不生成解析函数

时间:2016-10-24 14:59:06

标签: java protocol-buffers

我有以下.proto文件:

message MediatorMessageMsg{
    required double speed = 1;
    required double heading = 2;

    required string sender = 3;
}

我使用Eclipse Mars和Protocol Buffer 2.5.0版本。它生成必要的文件(我们不应该编辑)但是我不能使用

的重要功能
  • writeDelimitedTo()
  • parseDelimitedFrom()
  • newBuilder()。设置...
没有这些,使用整个东西根本就没有意义。我检查了文件,我可以在那里看到parseDelimitedFrom(),但我不能在我自己的项目中调用它(是的,已导入)。当我将鼠标悬停在错误上时,它会给我以下内容:

The method parseDelimitedFrom(ByteArrayInputStream) is undefined for the type MediatorMessage

任何人都知道为什么会这样?

编辑:有关此问题的更多详细信息。

我不能使用下面的函数来构建我的消息。它引发了一个错误。

MediatorMessage mediatorMessage = MediatorMessage.newBuilder().

或者我不能这样做

ByteArrayOutputStream output = new ByteArrayOutputStream(bufferSize);
mediatorMessage.writeDelimitedTo(output);

或者

ByteArrayInputStream firstInput = new ByteArrayInputStream(buf);
mediatorMessageOne = MediatorMessage.parseDelimitedFrom(firstInput);

因此,出于某种原因无法识别这些功能。

1 个答案:

答案 0 :(得分:1)

由于您还没有回答MediatorMessageMsg文件*.proto MediatorMessage.java如何找到protoc下面的一个简单示例。哪个应该指向正确的方向。

假设以下目录和文件结构,假定PATH已安装在您的bin/ lib/protobuf-java-2.5.0.jar src/Check.java MediatorMessage.proto 中。

import com.google.protobuf.TextFormat;
import sub.optimal.MediatorMessage.MediatorMessageMsg;

class Check {
    public static void main(String...args) {
        MediatorMessageMsg.Builder builder = MediatorMessageMsg.newBuilder();
        MediatorMessageMsg msg = builder.setSpeed(42.0)
                .setHeading(0.0)
                .setSender("foobar")
                .build();

        System.out.println(TextFormat.shortDebugString(msg));
    }
}

<强>的src / Check.java

option java_package = "sub.optimal";
option java_outer_classname = "MediatorMessage";

message MediatorMessageMsg{
    required double speed = 1;
    required double heading = 2;

    required string sender = 3;
}

<强> MediatorMessage.proto

protoc --java_out=src/ MediatorMessage.proto
  • 从proto文件生成Java源代码

    src/sub/optimal/MediatorMessage.java

    这将生成Java源文件javac -cp lib/protobuf-java-2.5.0.jar:src/. -d bin/ src/Check.java

  • 编译Java源代码

    bin/Check.class
    bin/sub/optimal/MediatorMessage$1.class
    bin/sub/optimal/MediatorMessage$MediatorMessageMsg$1.class
    bin/sub/optimal/MediatorMessage$MediatorMessageMsg$Builder.class
    bin/sub/optimal/MediatorMessage$MediatorMessageMsg.class
    bin/sub/optimal/MediatorMessage$MediatorMessageMsgOrBuilder.class
    bin/sub/optimal/MediatorMessage.class
    

    这会生成文件

    java -cp lib/protobuf-java-2.5.0.jar:bin/ Check
    
  • 运行简单检查

    speed: 42.0 heading: 0.0 sender: "foobar"
    

输出

split
相关问题