TLV文档阅读笔记-What is TLV及protobuf
TLV的全称为tag-length-value,接地气的名字叫type-length-value。
type:指数据的类型;
length:指value的长度;
value:为值
如下面这个TLV表示数据,准备这样的TLV包:
Data Tag = DF 82 0A
Data Length = 03
Data Value = 30 31 32.
在发送的时候就是这样的:
DF 82 0A 03 30 31 32
这些数据还没组合起来,比如:
DF 82 0A 03 30 31 32 DF 82 0B 04 01 12 22 33
tag1为:DF 82 0A
tag2为:DF 82 0B
这些都是被提前定义的,接收端读取时先读tag,然后在读length,再读后面的length长度的值(value字段)
下面是protobuf
早期的tlv是标准的type length value,此时没有id,后来有id了,是为了解决协议变动时的向前向后兼容性,但这个也不是protobuf的独创,早先已经有很多这种用法了,如今tlv的t就是tag,一般指(id, type),length则是个可选参数,根据type有时length是固定的,此时length可省略。
如下代码:
MyTest.java
package cn.it1995;import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass;
import lombok.Data;@Data
@ProtobufClass
public class MyTest {private String name1;private String name2;private Integer intValue;private Float floatValue;
}
Main.java
package cn.it1995;import com.baidu.bjf.remoting.protobuf.Codec;
import com.baidu.bjf.remoting.protobuf.ProtobufProxy;public class Main {public static void main(String[] args) {Codec<MyTest> myTestCodec = ProtobufProxy.create(MyTest.class);MyTest myTest = new MyTest();myTest.setName1("aaa");myTest.setName2("bbbb");myTest.setIntValue(99);
// myTest.setFloatValue(100.0f);try{byte[] encode = myTestCodec.encode(myTest);System.out.println("十六进制");for(Integer i = 0; i < encode.length; i++){System.out.print(Integer.toHexString(encode[i]) + " ");}System.out.println();MyTest decode = myTestCodec.decode(encode);System.out.println(decode);}catch (Exception e){e.printStackTrace();}}
}
porn.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>ProtobufDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.baidu</groupId><artifactId>jprotobuf</artifactId><version>2.4.9</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency></dependencies></project>
运行截图如下:
当为这样的值时:
myTest.setName1("aaa");myTest.setName2("bbbb");myTest.setIntValue(1000);
这个a代表是name1,这个12代表name,18代表intvalue。
当为这样的值时:
myTest.setName1("aaa");myTest.setName2("bbbb");myTest.setIntValue(99);
是这样的:
TLV文档阅读笔记-What is TLV及protobuf相关推荐
- Qt文档阅读笔记-共享库的创建与调用
使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...
- Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图
Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...
- Qt文档阅读笔记-Rotations Example相关
Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...
- FreeRTOS官方指导文档阅读笔记
FreeRTOS官方指导文档阅读笔记 基于 161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf,可 ...
- Blockly学习之文档阅读笔记
文档阅读来源--谷歌官网介绍: https://developers.google.com/blockly/guides/overview 概述 一个用于Web.Android.iOS的可视化代码编辑 ...
- Leaflet文档阅读笔记-Quick Start Guide笔记
目录 网络加载JS和CSS 初始化地图 在地图上做标记 在地图上点击事件获得坐标 个人对这篇文档的体会 网络加载JS和CSS 先要加载css,然后在加载js <link rel="st ...
- NiceScroll文档阅读笔记-NiceScroll(3.7.6)基本使用
前言 官方已经给出很好的文档了.在此本人总结下,方便以后查阅: GitHub - inuyaksa/jquery.nicescroll: nicescroll plugin for jquery - ...
- Qt文档阅读笔记-QWebEngineView及QML WebEngineView
这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...
- Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...
最新文章
- opencv学习笔记(二)
- [源码和文档分享]基于Netty和WebSocket的Web聊天室
- php与html交互实现登录,php与html实现交互的基本操作
- SSM商城项目(八)
- java学习(56):接口之间的继承续
- IDEA中导入VUE后,JS文件爆红解决办法
- javascript async await
- Android Tips – 填坑手册
- linux su,sudo命令
- Win10环境下VS2003安装教程
- 【人类简史】从动物到上帝 [以色列-尤瓦尔 · 赫拉利](阅读笔记)
- MATLAB椎体怎么画,求以半径为R的圆为底,平行且等于底圆直径的线段为顶,高为h的正劈锥体的体积.用matlab作!急用...
- Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“(已解决)
- delmatch oracle_oracle – 无法从结果集中读取列值
- python美元汇率兑换程序代码_如何实现python汇率转换代码
- linux运维开发之路(一)— 基础知识篇
- Microsoft Offfice 2010 测试版下载
- js设置button和input不可点击
- 鸿蒙os第一批到第四批要多久,鸿蒙值得期待 鸿蒙OS系统适应计划曝光
- 【拜读】HTTPS和SSL/TLS 协议
热门文章
- JQ数组筛选,去重,对象数组求和
- 企业级NginxWeb服务优化实战(上)
- Spring idea中spring配置文件自动检查配置应用程序上下文的操作
- 理工男打造帝都89平智能家庭
- c++中也有java中的匿名内部类
- python编写选股公式_Python通过通达信选股,用通达信软件,如何向里面输入选股函数...
- 某程序员哀叹:辛辛苦苦写几年代码,做了些业务,有了点成就感,但回头一看80%都没用,没法写到简历上!...
- 可视化电子标签在仓储管理上的应用
- php tab 键,微型计算机键盘上的Tab键是什么键?
- 如何选择笔记本电脑?电脑参数怎么看?