24 BK.TLV
优质
小牛编辑
133浏览
2023-12-01
[Tag][Length][Value],其中Tag占2字节 length占2个字节,当使用构造函数申请空间时,则需申请 数据个数 *(4+各个数据类型长度)个字节。
方法
构造函数
new BK.TLV(n)
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
n | number | 数据长度 |
返回值:
类型 | 名称 | 备注 |
---|---|---|
Object | BK.TLV |
例子:
var sendTlv = new BK.TLV(sendStr.length+4);
new BK.TLV(buff)
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
buff | Object | 数据缓存 |
返回值:
类型 | 名称 | 备注 |
---|---|---|
Object | BK.TLV |
例子:
var recvTlv = new BK.TLV(recvBuffer);
解析 bkJSParseTLV() / parseTLV()
参数:无
返回值:
类型 | 名称 | 备注 |
---|---|---|
Object | 解析结果 |
例子:
var result = recvTlv.bkJSParseTLV();
for (var key in result) {
if (result.hasOwnProperty(key)) {
var element = result[key];
BK.Script.log(0,0,"key = " + key + " element = "+element);
}
}
从tlv中取出buff bkJSTLVGetBuffer() / getBuffer()
参数:无
返回值:
类型 | 名称 | 备注 |
---|---|---|
Object | BK.Buffer对象 |
例子:
var recvBuffer = sendTlv.bkJSTLVGetBuffer();
获取tlv长度 bkJSTLVGetLength() / getLength()
参数:无
返回值:
类型 | 名称 | 备注 |
---|---|---|
number | tlv长度 |
例子:
var len = sendTlv.bkJSTLVGetLength();
写数据
使用方法和BK.Buffer相似
- bkJSTLVWriteInt8 / writeInt8
- bkJSTLVWriteInt16 / writeInt16
- bkJSTLVWriteInt32 / writeInt32
- bkJSTLVWriteInt64 / writeInt64
- bkJSTLVWriteUInt8 / writeUInt8
- bkJSTLVWriteUInt16 / writeUInt16
- bkJSTLVWriteUInt32 / writeUInt32
- bkJSTLVWriteUInt64 / writeUInt64
- bkJSTLVWriteFloat / writeFloat
- bkJSTLVWriteDouble / writeDouble
- bkJSTLVWriteBuffer / writeBuffer
TLV支持的类型:
TLVType = {
Int8 : 0x21,
Uint8 : 0x22,
Int16 : 0x21,
Uint16 : 0x24,
Int32 : 0x25,
Uint32 : 0x26,
Int64 : 0x27,
Uint64 : 0x28,
Byte : 0x29,
Double : 0x2a,
Float : 0x2b,
Int8Repeated : 0x31,
Uint8Repeated : 0x32,
Int16Repeated : 0x33,
Uint16Repeated : 0x34,
Int32Repeated : 0x35,
Uint32Repeated : 0x36,
Int64Repeated : 0x37,
Uint64Repeated : 0x38,
ByteRepeated : 0x39,
DoubleRepeated : 0x3a,
FloatRepeated : 0x3b
}
TLV作为数据发送 / 接收:
// ------- 作为数据发送 -------
var sendStr = "message";
var sendTlv = new BK.TLV(sendStr.length+4);
//写入一个String,标记为2
var sendBuf = new BK.Buffer(sendStr.length);
sendBuf.writeAsString(sendStr);
sendTlv.bkJSTLVWriteBuffer(sendBuf,TLVType.Byte,2);
// 假装经过了网络传输
var recvBuffer = sendTlv.bkJSTLVGetBuffer();
// ------- 作为数据接收 -------
var recvTlv = new BK.TLV(recvBuffer);
//解析
var result = recvTlv.bkJSParseTLV();
for (var key in result) {
if (result.hasOwnProperty(key)) {
var element = result[key];
BK.Script.log(0,0,"key = " + key + " element = "+element);
}
}
//根据标记读取数据
var value = result.tag2;
var recvStr = value.readAsString();
示例代码:Res/script/demo/basics/tlv_demo.js