Protocol Buffers

JS protobuf对Netty BinaryWebSocketFrame对象进行解码

半腔热情 提交于 2020-02-25 17:14:43
在使用Websocket protobuf协议传输时,onmessage收到这样的对象,一脸懵逼 解码成protobuf对象如下: let reader = new FileReader(); reader.readAsArrayBuffer(data); reader.onload = () => { const buf = new Uint8Array(reader.result); const response = Message.ChatMessage.deserializeBinary(buf); // 成功回调 callback(response); }; 分享学习是一件开心事 来源: oschina 链接: https://my.oschina.net/u/4215748/blog/3164296

数组与列表 <T> :什么时候使用哪个?

浪尽此生 提交于 2020-01-08 20:43:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> MyClass[] array; List<MyClass> list; 一个比另一个更可取的情况是什么? 又为什么呢? #1楼 在大多数情况下,使用 List 就足够了。 List 使用内部数组来处理其数据,并在向 List 添加比其当前容量更多的元素时自动调整数组的大小,这使其比需要事先了解容量的数组更易于使用。 请参阅 http://msdn.microsoft.com/zh-cn/library/ms379570(v=vs.80).aspx#datastructures20_1_topic5 ,以获取有关C#中列表的更多信息,或仅反编译 System.Collections.Generic.List<T> 。 如果需要多维数据(例如,使用矩阵或在图形编程中使用),则可能会改用 array 。 与往常一样,如果内存或性能成为问题,请对其进行衡量! 否则,您可能会对代码做出错误的假设。 #2楼 尚未提及的另一种情况是,当一个项目具有大量项目时,每个项目都由固定在一起的一束相关但独立的变量组成(例如,一个点的坐标或3d三角形的顶点)。 暴露场结构的数组将允许其元素“就地”被有效地修改,这是任何其他集合类型都不可能做到的。 由于结构的数组将其元素连续保存在RAM中,因此对数组元素的顺序访问会非常快。

iOS中使用Protocol Buffers

亡梦爱人 提交于 2020-01-06 23:17:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Google Protocol Buffer (简称 Protobuf )是由Google推出的一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或RPC数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data. Protobuf和XML相比同是数据交换协议,不过Protobuf更小、更快、也更简单。可以通过定义自己的数据结构,然后使用Protobuf的代码生成器生成代码,用生成的代码来读写这个数据结构。Protobuf具有如下几个优点: (1)“向后”兼容性好。不必担心因为消息结构的改变而造成的大规模的代码重构或者迁移的问题,因为添加新的消息中的字段并不会引起已经发布的程序的任何改变。 (2)语义更清晰。Protobuf使用 .proto 文件描述数据交换的格式,然后Protobuf编译器会将 .proto 文件编译生成对应的数据访问类以对 Protobuf 数据进行序列化、反序列化操作),无需解释器之类的东西。

Java中使用ProtoBuf的总结

◇◆丶佛笑我妖孽 提交于 2019-12-16 07:21:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 关于java中使用protobuf的使用方法 1.下载protobuf编译器,这个名字叫protoc,下载地址: https://github.com/protocolbuffers/protobuf/releases 2.编辑proto文件,编辑格式如下: syntax = "proto3"; package com.androidInfo; //可选 message info { string infoJson = 1; } 3.使用如下命令,将proto文件转换成java文件: protoc -I=./ --java_out=./ proto文件名.proto 4.将java文件复制到所有使用的包里 5.对数据进行序列化,格式如下: AndroidInfo.info.Builder androidInfo = AndroidInfo.info.newBuilder().setInfoJson(jo.toString()); byte[] bArr = androidInfo.toByteArray(); 6.解析数组到字符串 String s = AndroidInfo.info.parseFrom(bArr); 来源: oschina 链接: https://my.oschina.net/u

protobuf序列化使用说明

和自甴很熟 提交于 2019-12-10 07:41:39
protobuf转换方法 编写protobuf代码如下: package netty; option java_package = "com.clq.netty.protoc"; option java_outer_classname = "SubsribeReqProto"; message SubScribeReq{ required int32 subReqID = 1; required string userName = 2; required string productName = 3; repeated string address = 4; } package netty; option java_package = "com.clq.netty.protoc"; option java_outer_classname = "SubsribeRespProto"; message SubScribeResp{ required int32 subReqID = 1; required string respCode = 2; required string desc = 3; } 2 . 执行如下命令(首先下载proto.exe 地址: https://download.csdn.net/download/u012516914/10564014 ): E:\tmp

通信协议之Protocol buffer(高效的数据压缩编码方式之Java篇)

我怕爱的太早我们不能终老 提交于 2019-12-09 21:19:34
之前一直习惯用json进行数据的传输,觉得很方便。来到新公司后发现同事们用的更多的的协议都不是json,而是Protocol buffer。这个东西之前没有听说过,不明白同事们为什么放弃好好的json不用,用这个。后来了解到经常是设备与设备之间进行通信,而不是设备与服务器做通信。很多设备是linux下c语言做核心服务,c来解析json比较麻烦。于是决定花些时间来学习这个陌生的协议。 简介 1. 是什么?   Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于 通讯协议 和 数据存储 等领域。通俗点来讲它跟xml和json是一类。是一种数据交互格式协议。性能比 Json、XML 真的强!太!多! 2. 为什么要用?   - 平台无关,语言无关,可扩展;   - 提供了友好的动态库,使用简单;   - 解析速度快,比对应的XML快约20-100倍;   - 序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。 Java中使用Protocol Buffer 来源: oschina 链接: https://my.oschina.net/u/3069003/blog/2243525

TensorFlow给机器学习在移动端的运用

江枫思渺然 提交于 2019-12-07 16:27:47
人工智能、机器学习都已走进了我们的日常,尤其是愈演愈热的大数据更是跟我们的生活息息相关,做 人工智能、数据挖掘的人在其他人眼中感觉是很高大上的,总有一种遥不可及的感觉,在我司也经常会听到数据科学部的同事们提到 机器学习、数据挖掘 之类的词。但这些名词真的跟我们移动开发就没直接关系了吗? 作为移动开发者来说,无时无刻不被这些名词狠狠地敲打着脆弱的内心。???? ???? ???? 何时才能够将机器学习、深度学习应用在移动端,敲响移动端机器学习工业化的大门呢? 想象一下,某一天你身处一个完全陌生的环境,周围都是陌生的事物,而运行在iPhone的某个APP却对这个环境了如指掌,你要做的就是打开这个APP,输入你需要了解的事物,iPhone告诉你这个事物的信息,你也就没有了陌生事物了。世界就在眼前! 如下图: 上面物体的识别准确率还是蛮不错的,基本识别出了键盘(49%的概率)、鼠标(46%的概率)和水杯(24%的概率)。 但是在某些事物的识别准确度方便却差强人意,比如下图: Phone 8被识别成了iPod(59%的概率),而iPod的却是不怎么敢认(10%的概率)。想想最崩溃的估计是iPhone 8了,身价直接被降了好几个等级。 上面的例子来自于TensorFlow官方iOSDemo,暂且不评述TensorFlow的识别准确度如何,毕竟它还年轻,但是仅凭其识别能力的体现

CentOS 7下protobuf的源码编译安装

久未见 提交于 2019-12-07 13:13:40
protobuf的github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在 CentOS 7下编译源码进行安装。 github上有详细的安装说明:https://github.com/google/protobuf/blob/master/src/README.md 1、确定centos7上已经安装了下面的软件,或者直接用yum进行更新 autoconf automake libtool curl (used to download gmock) make g++ unzip 2、下载源码包,解压,编译安装 地址:https://github.com/google/protobuf/releases 选择 Source code (tar.gz)下载 tar -zxvf protobuf-3.1.0.tar.gz -C /usr/local/ cd protobuf-3.1.0/ # 如果使用的不是源码,而是release版本 (已经包含gmock和configure脚本),可以略过这一步 ./autogen.sh # 指定安装路径 ./configure --prefix=/usr/local/protobuf #编译 make # 测试,这一步很耗时间 make check make install #

Apche pig计算数据 导入Hbase

允我心安 提交于 2019-12-07 04:00:44
1.pig将数据导入或加载到hbase使用HBaseStorage UDF函数,地址: http://pig.apache.org/docs/r0.11.0/func.html#HBaseStorage 在shell中案例: pig -Dpig.additional.jars=/home/pps_recommend/pig-0.11.0/lib/protobuf-java-2.4.0a.jar -x $varPigMode << EOF recommend_data = LOAD '$recommend_output' as(id:chararray,items:chararray); STORE recommend_data INTO 'hbase://short_video_recommend' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('info:items'); EOF (提示:EOF是将其他应用程序在shell中输出,切记:特别在shell中有if判断语句 EOF要顶格写) 2. STORE [加载pig数据集别名] INTO 'hbase://[HBASE表名]' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('[HBASE列簇]

java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringer

五迷三道 提交于 2019-12-06 21:51:56
报错: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringer 原因: 在HBase 1.2.X版本及之前的版本HBase是强依赖于protobuf-2.5.0,如果在依赖中引入高版本的protobuf,会造成hbase的各种问题,所以在有HBase的项目中一定要慎重对待protobuf的版本 解决方法: 本地建一个工程将hbase jar包包裹起来,里面指定protobuf版本 <dependencyManagement> <dependencies> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency> <!--[TMS-391] Fix No Such Method Exception when connect HBase --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>12.0.1<