Flutter 颤振/飞镖:如何在颤振中解压缩/充气zlib二进制字符串

Flutter 颤振/飞镖:如何在颤振中解压缩/充气zlib二进制字符串,flutter,dart,binary,zlib,pako,Flutter,Dart,Binary,Zlib,Pako,我在nodejs服务器上使用pako包,并将压缩的二进制字符串从服务器发送到我的flatter客户端。我无法在Flatter客户端上对其进行解压缩/充气。我尝试了多种库的组合 我的服务器节点代码: var pako = require('pako'); let buffer = pako.deflate(JSON.stringify(userModels), { to: 'string' }); //Server code for sending to client 我

我在nodejs服务器上使用pako包,并将压缩的二进制字符串从服务器发送到我的flatter客户端。我无法在Flatter客户端上对其进行解压缩/充气。我尝试了多种库的组合

我的服务器节点代码:

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

import 'dart:io';
import 'dart:convert';
List<int> gzipBytes = serverResponse.data.codeUnits;
List<int> stringBytes = gzip.decode(gzipBytes);
var data = utf8.decode(stringBytes);
导入'dart:io';
导入“dart:convert”;
列出gzipBytes=serverResponse.data.codeUnits;
List stringBytes=gzip.decode(gzip字节);
var data=utf8.decode(stringBytes);
我得到以下例外情况

1725毫秒后重新启动应用程序。E/颤振(25340): [错误:flatter/lib/ui/ui\u dart\u state.cc(148)]未处理的异常: 内部错误:“过滤器错误,错误数据”E/抖动(25340):#0
_FilterImpl.processed(dart:io patch/filter_patch.dart:11:32)E/flatter(25340):#1 _FilterSink.addSlice (dart:io/数据转换器。dart:610:29)E/颤振(25340):#2
_FilterSink.add(dart:io/data_transformer.dart:596:5)E/flatter(25340):#3 ZLibDecoder.convert (dart:io/数据转换器。dart:465:9)E/颤振(25340):#4
Codec.decode(dart:convert/Codec.dart:26:34)


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

var bytes = response.bodyBytes;
接下来,看起来您不应该使用
gzip
,而应该使用
zlib

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

您是否可以打印正在传输的内容的十六进制数(在服务器和客户端上),以确保接收到服务器发送的内容。您是否正确设置了
内容类型
(例如
应用程序/octet流
)?还要检查
内容编码是否对您有帮助,然后您根本不需要压缩。我将以Json对象的形式从服务器发送响应。因此,我必须将压缩的zlib数据转换为二进制字符串,使其成为json对象的一部分。根据您的建议,我将服务器更改为发送压缩整数而不是字符串,现在它可以工作了。谢谢