为了账号安全,请及时绑定邮箱和手机立即绑定

通过BLE将GZIP数据从Android发送到NodeJS

通过BLE将GZIP数据从Android发送到NodeJS

蛊毒传说 2021-11-03 14:42:03
我在 Android 设备上构建了一个字符串,我需要压缩它并通过低功耗蓝牙将其发送到需要解压缩的 NodeJS 应用程序。在 Android/Java 端,我使用 GZIP 压缩它,然后在发送之前对其进行 Base64 编码,如下所示:public static String compress(String str) throws IOException {    byte[] blockcopy = ByteBuffer            .allocate(4)            .order(java.nio.ByteOrder.LITTLE_ENDIAN)            .putInt(str.length())            .array();    ByteArrayOutputStream os = new ByteArrayOutputStream(str.length());    GZIPOutputStream gos = new GZIPOutputStream(os);    gos.write(str.getBytes());    gos.close();    os.close();    byte[] compressed = new byte[4 + os.toByteArray().length];    System.arraycopy(blockcopy, 0, compressed, 0, 4);    System.arraycopy(os.toByteArray(), 0, compressed, 4,            os.toByteArray().length);    return Base64.encodeToString(compressed, Base64.DEFAULT);}在 NodeJS 端,我收到它,解码 Base64,然后尝试使用zlib库如下解压缩它:var buf = Buffer.from(raw, 'base64');var data = zlib.gunzipSync(buf);我已经单独测试了蓝牙通信,并且可以完全正常收集常规的解压缩数据。我还测试了发送未压缩但以 Base64 编码的原始数据,并且解码和工作正常。但是,在尝试解压缩时,我从zlib库中收到以下错误:{ Error: incorrect header check    at Gunzip.zlibOnError (zlib.js:153:15)    at Gunzip._processChunk (zlib.js:411:30)    at zlibBufferSync (zlib.js:144:38)    at Object.gunzipSync (zlib.js:590:14)    ...    errno: -3, code: 'Z_DATA_ERROR' }我做错了什么,我该如何解决这个问题?
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

通过将这 4 个字节(块复制)添加到压缩字节数组中,您可以有效地修改压缩数据的标头(错误说明)。要么像下面那样删除它们:


public static String compress(String str) throws IOException {


    ByteArrayOutputStream os = new ByteArrayOutputStream(str.length());

    GZIPOutputStream gos = new GZIPOutputStream(os);

    gos.write(str.getBytes());

    gos.finish();

    gos.close();

    os.close();

    return Base64.encodeToString(os.toByteArray(), Base64.DEFAULT);

}

或者在将 var buf 传递给 zlib.gunzipSync() 之前省略前 4 个字节(即块复制)。


查看完整回答
反对 回复 2021-11-03
?
交互式爱情

TA贡献1712条经验 获得超3个赞

尝试使用 Apache Commons Codec Base64OutputStream,这将输出一个已经在 Base64 中的流。


查看完整回答
反对 回复 2021-11-03
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信