当前位置: 首页 > news >正文

Protocol Buffers(Protobuf) 详解

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

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

✨博客主页: 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定义才能解读,无自解释性。
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

在这里插入图片描述

http://www.dtcms.com/a/327724.html

相关文章:

  • SQL注入学习笔记
  • 计算机网络1-7:第一章 概述 章节小结
  • 科普:增强细节真实感的“微弹跳”
  • 5-终端安全检测和防御技术
  • FPGA即插即用Verilog驱动系列——SPI发送模块
  • AV、IPS、WAF对比
  • 云手机网速和本机网速的关系
  • 解锁 Appium Inspector:移动端 UI 自动化定位的利器
  • 秋招笔记-8.12
  • STM32_bug总结(TIM定时中断进不去和只进1次)
  • 【Python 爬虫】Playwright 多浏览器支持(Chromium/Firefox/WebKit)
  • AI入门学习--AI模型评测
  • kali linux 2025.2安装WPS并设置无报错的详细步骤
  • 云计算概述
  • 卫生间装修防水怎么做合适?
  • 外卖:重构餐饮的线上服务密码
  • 串口通信“第二次总超时”的复盘
  • XC7A15T-1FTG256C Xilinx AMD Artix-7 FPGA
  • 后端找数据库
  • nvm install 14.21.3 时npm 无法下载和识别
  • 项目实例-页面
  • 股票智能体系统的设计与开发
  • VisualSVN Server 4.2.1 安装教程 - 64位下载与配置步骤详解
  • 【Docker项目实战】使用Docker部署Vikunja任务管理工具
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day2
  • 嵌入式 - Linux软件编程:文件IO
  • 零售业CRM实战:如何打通线上线下客户数据?
  • Ansible 基本使用
  • UE官方文档学习 C++ TAarry 查询(三)Contain,Find函数的使用
  • Redis--day4--实战-黑马点评--搭建环境