学习TLV数据结构

1、什么是TLV格式

      TLV为 Tag(类型),Length(长度),Value(值)的缩写,是BER (BasicEncoding Rules)编码一种方式。BER编码的方式有两种情况,一种是确定长度的方式,一种是不确定长度的方式。TLV数据主要应用于数据通信领域中。顾名思义,T字段表示报文类型,L字段表示报文长度、V字段往往用来存放报文的内容。

2、Tag

     Tag由一个或多个字节组成,下图描述首字节0~7位的具体含义

学习TLV数据结构_第1张图片

如图可知:

第7~8位:表示TLV的类型,00表示TLV描述的是基本数据类型(Primitive Frame, int,string,long...),01表示用户自定义类型(Private Frame,常用于描述协议中的消息)。

第6位:表示Value的编码方式,分别支持Primitive及Constructed两种编码方式, Primitive指以原始数据类型进行编码,Constructed指以TLV方式进行编码,0表示以Primitive方式编码,1表示以Constructed方式编码。

第1~5位:当Tag Value小于0x1F(31)时,首字节0~4位用来描述Tag Value,否则0~4位全部置1,作为存在后续字节的标志,Tag Value将采用后续字节进行描述。
    后续字节采用每个字节的1~7位(即7bit)来存储Tag Value, 第8位用来标识是否还有后续字节。若第8位为1,则表明有后续字节,若为0则表明无后续字节

3、Length

 Length 描述Value的长度。

学习TLV数据结构_第2张图片

1、若第8位为1,则7-1作为后续字节的长度,如:1000100,则表明后续还有4个字节作为value域的长度.若第8位位0,
则该7-1作为后续节点的的长度。4个字节代表value的长度,意味着什么呢,意味着内容的长度当需要很大的时候,字节的位数就会跟着越高,
7个字节就代表最大可以有256*256*256*256的长度

4、Value

Value 描述数据的值,由一个或多个值组成 ,值可以是一个原始数据类型(Primitive Data),也可以是一个TLV结构(Constructed Data)。

5、TLV数据实例

TLV格式数据实例

数据: 5F2D027A68

Tag域

5F → 01011111 → 5F 2D → 00101101 → 5F2D

Length域

02 → 00000010 → 02(2字节)

Value域

7A68

6、总结

总结:编码解析和过程:

1)根据第一个字节分解,bit1–bit5判断tag长度,bit6判断是否是复合tag; 
2)根据tag长度,找到len,根据len画出后面数据长度; 
3)根据是否是复合结构,继续循环如上分解过程;

你可能感兴趣的:(java)