uint29传输格式

前言

不知道谁想出来的。
反正我是想不到。

我看网上也没人讲这个。
写篇博客记录一下。

uint29

本质上是网络传输的时候,借用至多4字节Bytes,表达29位的无符号整数。

  1. 读8位数字,判断小于128? 是的话,返回末7位,即值域[0, 127)
  2. 上一步>=128的话,说明首位为1,丢弃首位,保留末7位。
  3. 再读8位数字,判断小于128? 是的话,将末7位拼接到暂存结果后,返回7+7=14位。
  4. 否则的话,说明首位是1,丢弃首位,保留末7位拼到暂存结果后。
  5. 再读8位,重复判断,首位非1则直接返回7+7+7=21位结果。
  6. 否则,首位为1,丢弃首位,保留拼接后的21位结果。
  7. 最后再读8位,这次不做判断,直接拼接,返回7+7+7+8=29位结果。
    uint29传输格式_第1张图片

返回的结果在一个32位的 arraybuffer里写一下。
就能转成[0,2^29)范围的 int32型正整数了。

好处

使用uint29的好处是,节约传输帧长。
要表达的数字很大时,至多占用4个字节。
而数字比较小(<128)时,只占用1个字节,就能节约3个出来。

你可能感兴趣的:(fe,json,websocket)