Protocol Buffers(Protobuf) 详解

发布于:2025-08-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

在这里插## 标题入图片描述

> 						大家好,我是程序员小羊!

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

在这里插入图片描述
在这里插入图片描述

一、简介

  1. 定义:一种轻便高效的结构化数据存储格式,用于结构化数据串行化(序列化),适用于数据存储或RPC数据交换。
  2. 特性:语言无关、平台无关、可扩展。
  3. 优势:相比XML,更小(310倍)、更快(20100倍)、更简单。
  4. 灵活性:可定义数据结构,用生成的源代码在多种语言中读写;更新数据结构不破坏旧程序。

二、安装步骤

  1. 上传并解压安装包
    [root@node01 ~]# tar -zxvf protobuf-2.6.1.tar.gz
    [root@node01 ~]# rm protobuf-2.6.1.tar.gz -rf
    [root@node01 ~]# mkdir -p /opt/yjx/protobuf-2.6.1
    
  2. 配置、编译、安装
    [root@node01 ~]# yum -y install gcc-c++
    [root@node01 ~]# cd protobuf-2.6.1
    [root@node01 protobuf-2.6.1]# ./configure --prefix=/opt/yjx/protobuf-2.6.1
    [root@node01 protobuf-2.6.1]# make && make install
    

三、使用流程

3.1 编码(编写.proto文件)

创建/root/PhoneRecordProtos.proto,定义数据结构:

package com.yjxxt.hbase.protobuf.util;
option java_outer_classname = "PhoneRecordProtos";
// 每条消息
message PhoneRecord {
  required string otherphone = 1;
  optional int32 time = 2;
  optional int64 date = 3;
  optional string type = 4;
}
// 每日消息
message PhoneRecordDay {
  repeated PhoneRecord phoneRecord = 1;
}
// 每月消息
message PhoneRecordMonth {
  repeated PhoneRecordDay phoneRecordDay = 1;
}

3.2 执行(编译生成Java文件)

cd /opt/yjx/protobuf-2.6.1/bin
./protoc --java_out=/root --proto_path=/root/ /root/PhoneRecordProtos.proto

将生成的Java文件拷贝至项目。

3.3 使用(结合HBase Java API)

  1. 初始化与资源释放:通过HBaseConfiguration创建连接,获取表对象,操作后关闭资源。
  2. 创建表:用TableDescriptorBuilderColumnFamilyDescriptorBuilder构建表和列族并创建。
  3. 压缩数据插入:构建PhoneRecordPhoneRecordDay对象,序列化后通过Put插入HBase。
  4. 查询数据解析:通过Get获取数据,用PhoneRecordDay.parseFrom解析二进制数据。

四、优缺点

4.1 优点

  • 更小、更快、更简单。
  • 支持自定义数据结构,通过代码生成器读写。
  • 可更新数据结构且不影响旧程序,向后兼容。
  • 语义清晰,无需复杂解析器。
  • 简单易学,文档和示例丰富。

4.2 缺点

  • 功能简单,无法表示复杂概念。
  • 通用性差,不如XML普及。
  • 不适用于基于文本的标记文档建模。
  • 二进制存储,需.proto定义才能解读,无自解释性。
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到