在网站http://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.4.0下载Jar包,在网站https://github.com/google/protobuf/releases下载工具,选择windows版本,

Protobuf的使用

解压protoc-3.4.0-win32.zip并设置环境变量,在系统变量Path中添加protoc.exe所在路径(D:\软件\protoc-3.4.0-win32\bin),在命令窗口运行protoc.exe –version

Protobuf的使用

出现如上提示表示可以使用。新建文本文件并改名为Message.prop,定义消息接口体,内容如下:

Protobuf的使用

在命令行输入以下命令:

protoc.exe -I D:\软件\protoc-3.4.0-win32\bin  --java_out=D:\软件\protoc-3.4.0-win32\bin\  Message.proto,即可生成相应的Java文件。在java项目中引用protobuf-java-3.4.0.jar,然后将生成的Java文件拷贝到项目中。

序列化消息

public static byte[] GetProtobufMessageBytes(MQ entity){

      Protobuf.MQMessageEntity.Builder builder = Protobuf.MQMessageEntity.newBuilder();

      builder.setSender(entity.getSender());

      builder.setMessageId(entity.getMessageId());

      builder.setMessageType(entity.getMessageType());

      builder.setSerializeType(entity.getSerializeType());

      builder.setIsRetry(entity.getIsRetry());

      builder.setClientId(entity.getClientId());

      builder.setMessageKey(builder.getMessageKey());

      builder.setSource(entity.getSource());

   builder.setContent(ByteString.copyFrom(entity.getMessage()));

      Protobuf.MQMessageEntity msg = builder.build();

      return msg.toByteArray();

   }

:entity为自定义类型,存储消息。

反序列化

Protobuf.MQMessageEntity entity = Protobuf.MQMessageEntity.parseFrom(bytes);

注:bytes为byte[]类型。

 

Protobuf的使用

如果要将byte[]转换成ByteString,可以使用ByteString.copyFrom(bytes[]);

将ByteString转换成byte[]可以使用toStringUtf8 。

相关文章: