亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過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 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號