BK.TLV [Tag][Length][Value]

[Tag][Length][Value],其中Tag占2字节 length占2个字节,当使用构造函数申请空间时,则需申请 数据个数 *(4+各个数据类型长度)个字节。

方法

构造函数

new BK.TLV(n)

参数 类型 名称 备注
n number 数据长度

返回值:

类型 名称 备注
Object BK.TLV

例子:

  1. var sendTlv = new BK.TLV(sendStr.length+4);

new BK.TLV(buff)

参数 类型 名称 备注
buff Object 数据缓存

返回值:

类型 名称 备注
Object BK.TLV

例子:

  1. var recvTlv = new BK.TLV(recvBuffer);

解析 bkJSParseTLV() / parseTLV()

参数:无

返回值:

类型 名称 备注
Object 解析结果

例子:

  1. var result = recvTlv.bkJSParseTLV();
  2. for (var key in result) {
  3. if (result.hasOwnProperty(key)) {
  4. var element = result[key];
  5. BK.Script.log(0,0,"key = " + key + " element = "+element);
  6. }
  7. }

从tlv中取出buff bkJSTLVGetBuffer() / getBuffer()

参数:无

返回值:

类型 名称 备注
Object BK.Buffer对象

例子:

  1. var recvBuffer = sendTlv.bkJSTLVGetBuffer();

获取tlv长度 bkJSTLVGetLength() / getLength()

参数:无

返回值:

类型 名称 备注
number tlv长度

例子:

  1. 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支持的类型:

  1. TLVType = {
  2. Int8 : 0x21,
  3. Uint8 : 0x22,
  4. Int16 : 0x21,
  5. Uint16 : 0x24,
  6. Int32 : 0x25,
  7. Uint32 : 0x26,
  8. Int64 : 0x27,
  9. Uint64 : 0x28,
  10. Byte : 0x29,
  11. Double : 0x2a,
  12. Float : 0x2b,
  13. Int8Repeated : 0x31,
  14. Uint8Repeated : 0x32,
  15. Int16Repeated : 0x33,
  16. Uint16Repeated : 0x34,
  17. Int32Repeated : 0x35,
  18. Uint32Repeated : 0x36,
  19. Int64Repeated : 0x37,
  20. Uint64Repeated : 0x38,
  21. ByteRepeated : 0x39,
  22. DoubleRepeated : 0x3a,
  23. FloatRepeated : 0x3b
  24. }

TLV作为数据发送 / 接收:

  1. // ------- 作为数据发送 -------
  2. var sendStr = "message";
  3. var sendTlv = new BK.TLV(sendStr.length+4);
  4. //写入一个String,标记为2
  5. var sendBuf = new BK.Buffer(sendStr.length);
  6. sendBuf.writeAsString(sendStr);
  7. sendTlv.bkJSTLVWriteBuffer(sendBuf,TLVType.Byte,2);
  8. // 假装经过了网络传输
  9. var recvBuffer = sendTlv.bkJSTLVGetBuffer();
  10. // ------- 作为数据接收 -------
  11. var recvTlv = new BK.TLV(recvBuffer);
  12. //解析
  13. var result = recvTlv.bkJSParseTLV();
  14. for (var key in result) {
  15. if (result.hasOwnProperty(key)) {
  16. var element = result[key];
  17. BK.Script.log(0,0,"key = " + key + " element = "+element);
  18. }
  19. }
  20. //根据标记读取数据
  21. var value = result.tag2;
  22. var recvStr = value.readAsString();

示例代码:Res/script/demo/basics/tlv_demo.js

原文: https://hudong.qq.com/docs/engine/api/BK.TLV.html