java处理TLV格式数据

1:什么是“TLV格式”?

答:TLV格式数据是指由Tag,Length,Value组成的可变的格式数据,简单可以理解为特格式的一个数组

  • T 可以理解为 Tag(标签) 或 Type(类型) ,用于标识标签或者编码格式信息;
  • L 定义数据的长度;
  • V 表示实际的数据。

示例: 01 03 01 02 03 02 05 F1 F2 F3 F4 F5

说明:示例中的这组数据共有2组TLV格式的数据

解析:第一组:T = 01;L = 03;V = 01 02 03

           第二组:T = 02;L = 05;V = F1 F2 F3 F4 F5

2:如何处理为java常用的格式?

     常用方式先转换为对象数组,在对对象进行解析得到想要的数据

     tlv对象

package com.entity;

public class Tlv {

    /** 子域Tag标签 */
    private Integer tag;

    /** 子域取值的长度 */
    private Integer length;

    /** 子域取值 */
    private byte[] value;

    public Tlv(Integer tag, Integer length, byte[] value) {
        this.length = length;
        this.tag = tag;
        this.value = value;
    }

    public Integer getTag() {
        return tag;
    }

    public void setTag(Integer tag) {
        this.tag = tag;
    }

    public Integer getLength() {
        return length;
    }

    public void setLength(Integer length) {
        this.length = length;
    }

    public byte[] getValue() {
        return value;
    }

    public void setValue(byte[] value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "tag=[" + this.tag + "]," + "length=[" + this.length + "]," + "value=[" + this.value + "]";
    }
}

将TLV格式转换为对象数组

package com.common.utils;

public abstract class TlvUtils {

    /**
     * 将byte[]转换为TLV对象列表
     * @param paramsByte tlv格式的byte数组
     * @param position tlv数据起始位置
     * @return
     */
    public static List<Tlv> builderTlvList(byte[] paramsByte,int position) {
        List<Tlv> tlvs = new ArrayList<Tlv>();
        while (position != paramsByte.length) {
            Integer _tag = paramsByte[position] & 0xFF;
            if(_tag == 0){
                break;
            }
            Integer _length = paramsByte[position+1] & 0xFF;
            byte[] _value = Arrays.copyOfRange(paramsByte,position+2,position+2+_length);
            position = position + 2 +_length;
            tlvs.add(new Tlv(_tag, _length, _value));
        }
        return tlvs;
    }

    public static void main(String[] args){
        byte[] paramsByte = new byte[]{};
        System.out.println(JsonUtils.toJson(builderTlvList(paramsByte,0)));
    }

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值