一、Protobuf是什么

Protobuf 是 Google 发布的开源项目,全称 Google Protocol(/'prəʊtəkɒl/,协议,草案) Buffers,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC[远程过程调用 remote procedure call ] 数据交换格式 。目前很多公司 http+json ==> tcp+protobuf

参考文档 : https://developers.google.com/protocol-buffers/docs/proto 语言指南

二、为什么要使用Protobuf

1、Netty 本身的编码解码机制存在的问题

1.1 Netty 自身提供的 codec(编/解码器)

Netty 提供的编码器

StringEncoder,对字符串数据进行编码

ObjectEncoder,对 Java 对象进行编码

...

Netty 提供的解码器

StringDecoder, 对字符串数据进行解码

ObjectDecoder,对 Java 对象进行解码

...

1.2 Netty 自身的 codec存在的问题

Netty 本身自带的 ObjectDecoder 和 ObjectEncoder 可以用来实现 POJO 对象或各种业务对象的编码和解码,底层使用的仍是 Java 序列化技术 , 而Java 序列化技术本身效率就不高,存在如下问题:

1.无法跨语言

2.序列化后的体积太大,是二进制编码的 5 倍多。

3.序列化性能太低

4.Protobuf 是以 message (信息)的方式来管理数据的.

5.支持跨平台、跨语言,即[客户端和服务器端可以是不同的语言编写的] (支持目前绝大多数语言,例如 C++、C#、Java、python 等)

6.高性能,高可靠性

7.使用 protobuf 编译器能自动生成代码,Protobuf 是将类的定义使用.proto 文件进行描述。说明,在idea 中编写 .proto 文件时,会自动提示是否下载 .ptotot 编写插件. 可以让语法高亮。

8.然后通过 protoc.exe 编译器根据.proto 自动生成.java 文件

2、protobuf 工作示意图

三、IDEA安装Protobuf

一、.proto文件语法高亮显示需要安装Protobuf Support插件:

网上的教程:

Intellij IDEA中使用Protobuf的正确姿势

依次点击Intellij中的“File”>"Settings>"Plugins"==>"Browse repositories",输入Protobuf,点击install:

而我的idea是2019.1版本,Plugins下面没有Browse repositories这个选项,选择磁盘安装:

先进入官方地址下载插件:protobuf插件



将插件下载到桌面(不用解压),打开idea,依次点击:

“File”>"Settings>"Plugins">"设置按钮">"install Plugin from Disk"==>找到刚刚下载的文件并且选中,之后会出现protobuf Support插件,选择重启Idea(Restart IDE),然后之前写的XXX.proto文件就会变颜色。

四、maven的方式集成插件

在pom文件中引入依赖:

<properties>
<java.version>1.8</java.version>
<protobuf.version>3.7.0</protobuf.version>
<grpc.version>1.9.1</grpc.version>
</properties> <dependencies>
<!--protobuf3-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.7.0</version>
</dependency>
<!--grpc-->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>${grpc.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>${grpc.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>

IDEA_2019.1版本中Protobuf的使用的更多相关文章

  1. 在Windows上一键编译各种版本的Protobuf

    所需工具 : cmake  for  windows 和  git for windows 原理:protobuf 是google的一个开源项目,其源代码在github上可以下载到,并且源码都采用cm ...

  2. (转)Unity中protobuf的使用方法

    在移动手机游戏开发中,目前Unity3D已成为比较主流的开发技术. 那么对于客户端服务器协议的打解包,我们有3中常用的处理方式: 1.自定义结构体:在协议中直接传输代码中自定义的结构体:这种方式的坏处 ...

  3. 在windows上一键编译各种版本的protobuf(2017-12-05修改)

    所需工具 : cmake  for  windows 和  git for windows 原理:protobuf 是google的一个开源项目,其源代码在github上可以下载到,并且源码都采用cm ...

  4. PHP7中Protobuf的安装使用

    PHP7中Protobuf的安装使用 写这篇文章的缘由是最近在关注RPC框架序列化的一些原理.但是在安装Protobuf的时候,发现网上的教程都太老了,加上目前Protobuf官方已经支持PHP了,不 ...

  5. debug、 release两个版本中正确运行的一些经验

    在Qt编程中,默认的是debug版本,在编译器中可以正常的使用,但是单独运行.exe可执行文件时却发现系统提示缺少文件.其实就是缺少必要的.dll动态库文件.根据提示添加需要的.dll动态库文件即可. ...

  6. [译] OpenStack Kilo 版本中 Neutron 的新变化

    OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...

  7. [译] OpenStack Liberty 版本中的53个新变化

    一个新的秋季,一个新的OpenStack 版本.OpenStack 的第12个版本,Liberty,在10月15日如期交付,而且目前发行版本已经备好了.那么我们期望能从过去六个月时间的开发中获得些什么 ...

  8. IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错

    某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:re ...

  9. 在不同的pyhon版本中切换

    issue discription 在一台电脑上同时安装了python2.7和python3.5,怎样在这两个版本中切换调用? solution to the issue 进入python安装文件夹, ...

随机推荐

  1. 寻找两个数组中的公共元素Java程序代码

    package lianxi; import java.util.*; public class UnionSearch { public static void main(String[] args ...

  2. slice切片函数

    clc;clear all;close all; [X,Y,Z,V] = flow;x1 = min(min(min(X)));x2 = max(max(max(X)));y1 = min(min(m ...

  3. python lambda表达式应用

    在python中有两种函数,一种是通过def得到的函数,一种是匿名函数,也就是lambda表达式.语法格式如下: lambda argument_list:expersion 语法中的argument ...

  4. 论文阅读LR LIO-SAM

    Abstract 紧耦合lidar inertial里程计, 用smoothing和mapping. 1. Introduction 紧耦合lidar-inertial里程计. 紧耦合的lidar i ...

  5. 让API并行调用变得如丝般顺滑的绝招

    当数据量较大的时候,都会通过分库分表来拆分,分担读写的压力.分库分表后比较麻烦的就是查询的问题,如果不是直接根据分片键去查询的话,需要对多个表进行查询. 在一些复杂的业务场景下,比如订单搜索,除了订单 ...

  6. React 入门-写个 TodoList 实例

    React 是一个用于构建用户界面的 JavaScript 库,主要特点有: 声明式渲染:设计好数据和视图的关系,数据变化 React 自动渲染,不必亲自操作DOM 组件化:页面切分成多个小部件,通过 ...

  7. 知乎上看到的一篇讲解Epoll的文章,较形象生动

    作者:蓝形参链接:https://www.zhihu.com/question/20122137/answer/14049112来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  8. 基于http的netty demo

    1.引入netty的pom <dependency> <groupId>io.netty</groupId> <artifactId>netty-all ...

  9. HTML学习案例--仿淘宝商品信息

    步骤:1.布局分析 2.敲代码 考察知识点: 1.类选择器(素材第四天) 2.CSS关于display,padding,margin的应用 3.如何用div布局 总结: 如果想让一行有两组以上的字块, ...

  10. securefx 系统中不到指定文件 (转中文)

    如何处理上传工具SecureFX中的中文乱码 工具/原料   SecureFX centos7 方法/步骤  转百度知道 https://jingyan.baidu.com/article/eae07 ...