热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Google的Protobuf的使用方式(序列化和反序列化工具编解码)

1.google的protobuf是什么?用于rpc的自定义协议,体积更小,序列化和反序列化的第三方库,和apachethrift是同一种技术。2.rpc库的介绍?(1)RMIre

1.google的protobuf是什么?

用于rpc的自定义协议,体积更小,序列化和反序列化的第三方库,和apache thrift是同一种技术。

2.rpc库的介绍?

(1) RMI    remote  method  invocation  

广泛用于EJB,实际上是一种跨机器的调用,通过网络传输,调用方A调用序列化字节码传输到B机器反序列化,调用B的方法,B回传结果后序列化网路传输,A反序列化成最终结果。

限制 : 只针对于Java语言。

特点 :网络传输代码自动生成   client --> stub (桩)    , server --->skeleton(骨架)

传输机制:序列化和反序列化 也叫做 :编码与解码

(2)RPC  remote procedure call  远程过程调用

特点: 服务端和客户端代码可跨语言 实现

编写模式 : 

[1]定义一个接口说明文件:描述了一个对象(结构体),对象成员,接口方法等一系列信息。

[2]通过RPC框架所提供的编译器,将接口说明文件编译成具体语言文件。

[3]客户端和服务器端分别引入编译器所生成的文件,即可像调用本地方法一样调用远程方法。

RPC效率决定因素:编解码速度,数据压缩程度    ,基于Socket效率高 (webservice采用http性能不如Socket)

3.ProtoBuf介绍?

全称:Protocol Buffers

支持的语言越多,拥有的数据类型越少,因为数据类型必须是所有语言的交集。

message消息定义:

1 message Person {
2   required string name = 1; -- 12,3是表示参数的顺序而不是默认值
3   required int32 id = 2;
4   optional string email = 3;
5 }

编码-序列化:

1 Person john = Person.newBuilder()
2     .setId(1234)
3     .setName("John Doe")
4     .setEmail("jdoe@example.com")
5     .build();
6 output = new FileOutputStream(args[0]);
7 john.writeTo(output);

解码-反序列化:

//C++语言解码
Person john = Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .setEmail("jdoe@example.com")
    .build();
output = new FileOutputStream(args[0]);
john.writeTo(output);

netty中使用的protobuf的gradle依赖:

 1 group ‘com.netty‘
 2 version ‘1.0-SNAPSHOT‘
 3 
 4 apply plugin: ‘java‘
 5 
 6 sourceCompatibility = 1.8
 7 targetCompatibility = 1.8
 8 
 9 repositories {
10     mavenCentral()  //中央库
11 }
12 
13 dependencies {
14 //    testCompile group: ‘junit‘, name: ‘junit‘, version: ‘4.12‘
15 //    testCompile("junit:junit:4.12")
16 
17     //netty全部jar包
18     compile(
19             "io.netty:netty-all:4.1.10.Final",
20             //proobuf的包
21             "com.google.protobuf:protobuf-parent:3.3.1",
22             "com.google.protobuf:protobuf-java-util:3.3.1"
23     )
24 
25 }

tips:google protobuf 的升级版 gRPC 

Google 的Protobuf 的使用方式(序列化和反序列化工具-编解码)


推荐阅读
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
author-avatar
强毛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有