pako解压AIS(Automatic Identification System)数据

155 阅读1分钟

在传输AIS数据时,由于返回的数据量过大,导致接口请求时间长,页面卡顿等问题。于是,通过采用压缩数据来提高接口响应速度。后台用了自带的gzip库。而前端解压使用库 pako.js。

接口返回压缩数据。(H4sIAAAAAAAAAA典型的base64头,以==结尾。为什么使用base64进行编码?为了传输一些不能用文字表示的io流。)。

图片

解压后数据。

图片

解压参考代码

  private unzip(b64Data: string) {
    let strData = atob(b64Data)
    let charData = strData.split('').map((x) => {
      return x.charCodeAt(0)
    })
    let binData = new Uint8Array(charData)
    const data = pako.inflate(binData)
    const array = new Uint16Array(data)
    let res = ''
    let chunk = 8 * 1024
    let i
    for (i = 0; i < array.length / chunk; i++) {
      res += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk))
    }
    res += String.fromCharCode.apply(null, array.slice(i * chunk))
    return decodeURIComponent(escape(res))
  }