flutter / dart:如何在flutter中解压缩/膨胀zlib二进制字符串

时间:2019-10-16 13:11:14

标签: flutter dart binary zlib pako

我在nodejs服务器上使用pako软件包,并将压缩的二进制字符串从服务器发送到flutter客户端。我无法在Flutter客户端上对其进行解压缩/充气。我尝试过图书馆的组合

我的服务器NodeJS代码:

    var pako = require('pako');
    let buffer = pako.deflate(JSON.stringify(userModels), { to: 'string' });
    //Server code for sending to client

我的Flutter代码:

import 'dart:io';
import 'dart:convert';
List<int> gzipBytes = serverResponse.data.codeUnits;
List<int> stringBytes = gzip.decode(gzipBytes);
var data = utf8.decode(stringBytes);

我遇到以下异常。

  

在1,725毫秒内重新启动应用程序。 E /颤振(25340):   [错误:flutter / lib / ui / ui_dart_state.cc(148)]未处理的异常:   InternalError:“过滤器错误,数据错误” E / flutter(25340):#0
  _FilterImpl.processed(dart:io-patch / filter_patch.dart:11:32)E / flutter(25340):#1 _FilterSink.addSlice   (dart:io / data_transformer.dart:610:29)E / flutter(25340):#2
  _FilterSink.add(dart:io / data_transformer.dart:596:5)E / flutter(25340):#3 ZLibDecoder.convert   (dart:io / data_transformer.dart:465:9)E / flutter(25340):#4
  编解码器(dart:convert / codec.dart:26:34)

1 个答案:

答案 0 :(得分:0)

您没有显示如何接收数据,但没有通过字符串。例如,如果使用package:http,请使用:

var bytes = response.bodyBytes;

下一步,看起来您不应该使用gzip,而是zlib;

var inflated = zlib.decode(bytes);
var data = utf8.decode(inflated);
json.decode(data);