Backend | Google Protobuf 序列化技术
by Botao Xiao
Google protobuf是一种可以替换Java序列化的技术,该技术有以下几种优势:
- 跨语言,可以支持Java, C++和Python
- 速度快,序列化的速度更快一些
- 体积小, 相比于Java生成的序列化数据长度,Protobuf的序列化结果长度小很多。
使用IntelliJ IDEA生成proto文件
- 写出类的proto文件代码
package NettyStudy;
option java_package = "protobuf";
option java_outer_classname = "UserInfoProto";
message UserInfo{
required int64 id = 1;
required string name = 2;
}
- 在Maven中引入包 ```Xml
3. View->Tool Windows->Maven projects->protobuf->protobuf:compile, 就会在target中生成编译成的java文件。
4. 将java文件考入对应的包中。
### 使用protobuf序列化和反序列化对象
```Java
public class UserInfoProtoTest {
/**
* 将对象序列化。
* @param userInfo
* @return
*/
private static byte[] encode(UserInfoProto.UserInfo userInfo){
return userInfo.toByteArray();
}
/**
* 将序列化的对象反序列化。
* @param bytes
* @return
* @throws InvalidProtocolBufferException
*/
private static UserInfoProto.UserInfo decode(byte[] bytes) throws InvalidProtocolBufferException {
return UserInfoProto.UserInfo.parseFrom(bytes);
}
/**
* 生成对象并进行注入。
* @return
*/
private static UserInfoProto.UserInfo createUserInfo(){
UserInfoProto.UserInfo.Builder builder = UserInfoProto.UserInfo.newBuilder();
builder.setId(10L);
builder.setName("SeanForFun");
return builder.build();
}
public static void main(String[] args) throws InvalidProtocolBufferException {
UserInfoProto.UserInfo info = createUserInfo();
System.out.println(info);
UserInfoProto.UserInfo info1 = decode(encode(info));
System.out.println(info1.toString());
}
}
引用
Subscribe via RSS