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相关推荐

  1. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  2. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  3. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  4. FreeRTOS官方指导文档阅读笔记

    FreeRTOS官方指导文档阅读笔记 基于 161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf,可 ...

  5. Blockly学习之文档阅读笔记

    文档阅读来源--谷歌官网介绍: https://developers.google.com/blockly/guides/overview 概述 一个用于Web.Android.iOS的可视化代码编辑 ...

  6. Leaflet文档阅读笔记-Quick Start Guide笔记

    目录 网络加载JS和CSS 初始化地图 在地图上做标记 在地图上点击事件获得坐标 个人对这篇文档的体会 网络加载JS和CSS 先要加载css,然后在加载js <link rel="st ...

  7. NiceScroll文档阅读笔记-NiceScroll(3.7.6)基本使用

    前言 官方已经给出很好的文档了.在此本人总结下,方便以后查阅: GitHub - inuyaksa/jquery.nicescroll: nicescroll plugin for jquery - ...

  8. Qt文档阅读笔记-QWebEngineView及QML WebEngineView

    这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...

  9. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

最新文章

  1. opencv学习笔记(二)
  2. [源码和文档分享]基于Netty和WebSocket的Web聊天室
  3. php与html交互实现登录,php与html实现交互的基本操作
  4. SSM商城项目(八)
  5. java学习(56):接口之间的继承续
  6. IDEA中导入VUE后,JS文件爆红解决办法
  7. javascript async await
  8. Android Tips – 填坑手册
  9. linux su,sudo命令
  10. Win10环境下VS2003安装教程
  11. 【人类简史】从动物到上帝 [以色列-尤瓦尔 · 赫拉利](阅读笔记)
  12. MATLAB椎体怎么画,求以半径为R的圆为底,平行且等于底圆直径的线段为顶,高为h的正劈锥体的体积.用matlab作!急用...
  13. Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“(已解决)
  14. delmatch oracle_oracle – 无法从结果集中读取列值
  15. python美元汇率兑换程序代码_如何实现python汇率转换代码
  16. linux运维开发之路(一)— 基础知识篇
  17. Microsoft Offfice 2010 测试版下载
  18. js设置button和input不可点击
  19. 鸿蒙os第一批到第四批要多久,鸿蒙值得期待 鸿蒙OS系统适应计划曝光
  20. 【拜读】HTTPS和SSL/TLS 协议

热门文章

  1. JQ数组筛选,去重,对象数组求和
  2. 企业级NginxWeb服务优化实战(上)
  3. Spring idea中spring配置文件自动检查配置应用程序上下文的操作
  4. 理工男打造帝都89平智能家庭
  5. c++中也有java中的匿名内部类
  6. python编写选股公式_Python通过通达信选股,用通达信软件,如何向里面输入选股函数...
  7. 某程序员哀叹:辛辛苦苦写几年代码,做了些业务,有了点成就感,但回头一看80%都没用,没法写到简历上!...
  8. 可视化电子标签在仓储管理上的应用
  9. php tab 键,微型计算机键盘上的Tab键是什么键?
  10. 如何选择笔记本电脑?电脑参数怎么看?