Java的TLV实现编码和解码
TLV介绍
BER编码的⼀种,ASN1标准,全称Tag(标签),Length(长度),Value(值)。
IS-IS数据通信领域中,tlv三元组: tag-length-value(TLV)。T、L字段的长度往往固定(通常为1~4bytes),V字段长度可变。顾名思义,T字段表⽰报⽂类型,L字段表⽰报⽂长度、V字段往往⽤来存放报⽂的内容。
本⽂简单介绍使⽤java对TLV的编码和解码操作
error parse new⾸先引⼊ber-tlv的jar包
本⽂中引⼊1.0-10包
<dependency>
<groupId>com.payneteasy</groupId>
<artifactId>ber-tlv</artifactId>
<version>1.0-10</version>
</dependency>
编码
BerTlvBuilder berTlvBuilder = new BerTlvBuilder();
//这⾥的Tag要⽤16进制,Length是⾃动算出来的,最后是要存的数据
berTlvBuilder.addText(new BerTag(0x1), "java");
berTlvBuilder.addText(new BerTag(0x2), "3213");
//add value的时候可以选择是text格式或者是data byte[]等等其他都可以
berTlvBuilder.addDate(new BerTag(0x3), new Date());
//默认是不⽀持汉字的,所以我们要把他转成字节
byte[] bytes3 = "我爱java,java爱我".getBytes("UTF-8");
berTlvBuilder.addBytes(new BerTag(0x4),bytes3);
//这⾥就完成参数的输⼊了,然后将它转成字节
byte[] bytes = berTlvBuilder.buildArray();
//转成Hex码来传输
String hexString = HexString(bytes);
解码
//将hex码转成byte字节
byte[] bytes2 = HexUtil.parseHex(hexString);
BerTlvParser parser = new BerTlvParser();
BerTlvs tlvs = parser.parse(bytes2, 0, bytes2.length);
//如果value的数据类型都⼀样的花可以通过getList来获取然后便利输出
List<BerTlv> list = List();
for (BerTlv berTlv : list) {
byte[] bytesValue1 = BytesValue();
String s = new String(bytesValue1,"UTF-8");
System.out.println(s);
}
//也可以指定Tag来获得数据
BerTlv berTlv = tlvs.find(new BerTag(0x3));
System.out.HexValue());
今天对接接⼝的时候对⽅需要将数据通过TLV进⾏序列化传输,百度没有到合适的代码,最后在github上看到了这个,通过demo很简单就学会了使⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论