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

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

JavaScript 中帶偏移量的 GZip 解壓

JavaScript 中帶偏移量的 GZip 解壓

冉冉說 2023-07-20 16:43:01
我嘗試使用的 API 返回 base64 編碼的響應。首先使用具有 4 位偏移量的 GZip 壓縮響應,然后進行 Base64 編碼。我嘗試使用 JavaScript( pako和zlib?)解析響應,但在這兩種情況下都失敗了。API 有一個關于響應解壓縮如何工作的 C# 代碼示例,但我真的不知道如何將其轉換為 JavaScript。那么誰能幫我把這個函數轉換成 JavaScript 或者給我一些關于如何處理 4 字節偏移的提示?我在圖書館的文檔中沒有找到任何相關內容。public string Decompress(string value){? byte[] gzBuffer = Convert.FromBase64String(value);? using (MemoryStream ms = new MemoryStream())? {? ? int msgLength = BitConverter.ToInt32(gzBuffer, 0);? ? ms.Write(gzBuffer, 4, gzBuffer.Length - 4);? ? byte[] buffer = new byte[msgLength];? ? ms.Position = 0;? ? using (System.IO.Compression.GZipStream zip = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Decompress))? ? {? ? ? zip.Read(buffer, 0, buffer.Length);? ? }? ? return System.Text.Encoding.Unicode.GetString(buffer, 0, buffer.Length);? ?}}
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

如果你想逐行翻譯該函數:


// This is ES6 code; if you want better browser compatibility

// use the ES5 variant.

import { gunzipSync, strToU8, strFromU8 } from 'fflate';

const decompress = str => {

? // atob converts Base64 to Latin-1

? // strToU8(str, true) converts Latin-1 to binary

? const bytes = strToU8(atob(str), true);

? // subarray creates a new view on the same memory buffer

? // gunzipSync synchronously decompresses

? // strFromU8 converts decompressed binary to UTF-8

? return strFromU8(gunzipSync(bytes.subarray(4)));

}

如果您不知道 ES6 是什么:


在您的 HTML 文件中:


<script src="https://cdn.jsdelivr.net/npm/fflate/umd/index.js"></script>

在你的JS中:


var decompress = function(str) {

? var bytes = fflate.strToU8(atob(str), true);

? return fflate.strFromU8(fflate.gunzipSync(bytes.subarray(4)));

}

我想提一下,如果您要在最后累積成一個字符串,那么流幾乎完全沒有用處,因此 C# 代碼不是最佳的。同時,由于您使用的是標準庫,因此它是唯一的選擇。


此外,如果可能的話,我強烈建議使用回調變體(即gunzip代替gunzipSync),因為它在單獨的線程上運行,以避免導致瀏覽器凍結。


查看完整回答
反對 回復 2023-07-20
  • 1 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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