Protocol Buffers 用c++发 用java收 序列化和反序列化
时间: 2023-07-18 20:37:24 浏览: 167
使用Protocol Buffers进行跨语言的序列化和反序列化,需要确保不同语言之间的数据格式和字段一致。以下是使用C++发送,Java接收的示例代码:
首先,定义一个protobuf文件,例如:
```protobuf
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
string address = 3;
}
```
使用protoc工具编译该文件,在C++项目中生成对应的C++类,例如:
```sh
protoc --cpp_out=./ Person.proto
```
在C++项目中使用该类进行序列化和发送:
```cpp
// 创建一个Person实例
Person person;
person.set_name("张三");
person.set_age(20);
person.set_address("北京市");
// 将Person实例序列化为字符串
std::string data;
person.SerializeToString(&data);
// 发送字符串数据到Java服务端
// ...
```
在Java项目中,同样需要引入Protocol Buffers的依赖包:
```xml
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.17.3</version>
</dependency>
```
使用该protobuf文件生成Java类,例如:
```sh
protoc --java_out=./ Person.proto
```
在Java项目中,使用该类进行接收和反序列化:
```java
// 接收从C++服务端发送过来的字符串数据
// ...
// 将接收到的字符串反序列化为Person实例
Person person = Person.parseFrom(data.getBytes());
// 输出Person实例的信息
System.out.println("姓名:" + person.getName());
System.out.println("年龄:" + person.getAge());
System.out.println("地址:" + person.getAddress());
```
以上就是使用Protocol Buffers进行跨语言的序列化和反序列化的示例代码。
阅读全文