- 应该区分两个维度。
- 一个是数据结构化,
- json 侧重于数据结构化 而非 数据序列化
- 一个是数据序列化
- ProtoBuf 侧重于数据序列化 而非 数据结构化
- 类似于建造者模式
- 先builder 再build获得实例
- FirstProtobuf.User.Builder builder = FirstProtobuf.User.newBuilder();
- User info = builder.build()
- 第一个坑(针对java开发)
- 因此不像java那样,直接操作对象,可以引用传递
- 我们在用java的时候,比如说直接传一个User user,对user.setName("2"),然后我们就不操心了,因为上游调用层,会拿到最新的user
- 但用ProtoBuf 对象时,因为每一次更新都是bulid一个新的实例,必须赋值返回,上游调用层不能直接使用user的对象,必须 User user1 = User .tobulider.setname("2").build; 事实上user 的值是没变的
- 第二个坑(针对java开发)
- 假如声明一个list对象
- 添加新元素的时候
- User是java 对象,是直接User.toBuilder().addTableRows(row).build();
- User是protobuff 对象,直接User.toBuilder().addTableRows(row).build()会报错
- 类似于java里的数组,大小已固定,不会自动扩容
- 因此 一般根据大小,直接设置:user= User.toBuilder().setTableRows(i, row).build();
java操作protobuff遇到的坑
最新推荐文章于 2024-03-29 20:33:59 发布