protobuf 2.4.1 - 将数据从C ++发送到Java

protobuf 2.4.1 - sending data from c++ to Java

本文关键字:Java 数据 protobuf      更新时间:2023-10-16

我试图在c ++和java之间交换消息,反之亦然,但没有成功。我定义了两条具有联合类型的消息(一条从 c++ 发送到 java,另一条以相反的方式发送)(请参阅随附的 .proto)。

c++ 代码如下:

operational_gui::OperationalMessage message; 
message.set_type(operational_gui::OperationalMessage::OWNPOSITIONREPORT); 
message.mutable_oprep()->set_latitude(38.5); 
message.mutable_oprep()->set_longitude(-9.8); 
message.mutable_oprep()->set_heading(25); 
message.mutable_oprep()->set_validity(0); 
message.SerializeToArray(buf, message.ByteSize()); 
m_pNamedPipeSocket->write(buf, message.ByteSize()); 
m_pNamedPipeSocket->flush();

java 代码如下:

int bytes = pipe.read(buffer);
MessagesProtos.OperationalMessage message = MessagesProtos.OperationalMessage.parseFrom(buffer);
switch(message.getType()){
    case OWNPOSITIONREPORT:
        System.out.println("Response is OwnPositionReport");
        break;
    case FRIENDPOSITIONREPORT:
        System.out.println("Response is FriendPositionReport");
        break;
    case COMMSTATUSREPORT:
        System.out.println("Response is CommStatusReport");
        break;
 }

通信是通过管道进行的(c++上的QLocalSocket,java端的FileInputStream)

C++发送 33 个字节,java 接收了所有字节,但异常 InvalidProtocolBufferException:协议消息包含无效标记(零)。

有什么提示吗?

提前谢谢。

你可以

试试Qt Jambi:"[...]此外,Qt Jambi还通过提供Qt Jambi生成器,使C++程序员能够轻松地将他们的Qt代码与Java集成。

http://qt-jambi.org/

在Linux系统上,你也可以考虑使用gobjects或使用DBUS(它也有Windows端口)。