protobuf序列化一个int型整数1

本文详细分析了protobuf如何序列化一个int型整数,重点介绍了序列化过程,从`AbstractMessageLite.toByteArray()`到`writeUInt32NoTag()`,解释了在value小于128时的优化策略,以及protobuf如何在1-5字节动态保存数据,节省存储空间。
摘要由CSDN通过智能技术生成

// 简单过了下计算过程

定义并生成消息

syntax="proto3";
package com.test.pb;
option java_package = "com.test.protobuf";
option java_outer_classname = "PersonProto";

message Person { 
	int32 id=1;
}

测试类

Java在内存中占32位,protobuf占1个字节8位

package com.test.protobuf;
import java.util.Arrays;
/** protobuf的二进制序列化操作:
 * 序列化时减少了额外信息
 * 动态伸缩性保存字节
 *  */
public class TestProto {
	public static void main(String[] args) throws Exception {
		serialize();
		System.out.println("----------");
		deserialize();
	}
	public static void serialize() throws Exception {
		PersonProto.Person.Builder builder = PersonProto.Person.newBuilder();
		builder.setId(1);
		com.test.protobuf.PersonProto.Person p = builder.build();
		//
		System.out.println(Arrays.toString(p.toByteArray()));
	}
	public static void deserialize() throws Exception {
		PersonProto.Person.Builde
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值