cocoscreator 使用pako压缩字符串

文章讲述了作者在Cocos项目中遇到大量数据存储需求,选择使用pako库进行压缩。遇到压缩结果为对象而非字符串的困扰,并分享了解压时需要先转换为对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中遇到个问题,需要把玩家本地的数据一股脑丢给服务端储存,但是数据量很大,于是想到先进行一次本地压缩。翻了一遍文档cocos官方居然没有提供压缩接口!!!

于是找了个第三方库:pako

引入pako
  1. 下载源文件:https://gitee.com/renew_old_romance/pako/repository/archive/master.zip
  2. 找到pako.js 一般在 pako-master\pako-master\dist
  3. 在项目assets中建一个"libs"文件夹
  4. 将pako.js 放入此"libs"文件中
  5. 在"资源管理器"中选中"pako.js"文件 在"属性检查器"中将"导入为插件"选项勾上 (我使用的版本2.4.3自己弹出对话框)
使用示例
//压缩
let str = "一生平安"
let a = pako.gzip(str)
//解压   
let b = pako.ungzip(a, { to: "string" });
踩坑

比较费解的是压缩得到结果居然是个object, 不是字符串。
于是上传数据之前先转为字符串,以为这样便万无一失!
不出意外果然出了意外客户端拿到数据是字符串,当要解压时pako的解压却不接受字符串!只能再转换为object再解压。

/**压缩 */
static zip(ob:object){
      let str = JSON.stringify(ob)
      let dataStr = pako.gzip(str)
      return String(dataStr)
   }


/**解压缩 */
  static unZip(str:string){
       let arr = str.split(",")
       let obStr = pako.ungzip(arr, { to: "string" })
       return JSON.parse(obStr)
   }

完结 请点赞

### Vue3 中使用 Pako 库进行字符串压缩与解压缩 在 Vue3 项目中,可以通过 `pako` 库实现字符串压缩和解压缩操作。以下是详细的说明以及示例代码。 #### 安装依赖 首先需要安装 `pako` 库到项目中: ```bash npm install pako ``` #### 字符串压缩 通过 `pako.deflate` 方法可以将字符串转换为压缩后的二进制数据。由于该方法默认返回的是字节数组形式的数据,因此通常会将其进一步编码为 Base64 格式以便于存储或传输。 ##### 示例代码 ```javascript import pako from 'pako'; function compressString(input) { // 将字符串转为 UTF-8 编码的数组缓冲区 const uint8array = new TextEncoder().encode(input); // 使用 Pako 进行压缩 const compressedData = pako.deflate(uint8array, { level: 9 }); // 转换为 Base64 格式的字符串 return btoa(String.fromCharCode(...compressedData)); } // 测试函数 const originalString = "这是一个测试字符串用于演示如何在 Vue3 中使用 Pako 压缩字符串"; const compressedResult = compressString(originalString); console.log("原始字符串:", originalString); console.log("压缩后的字符串 (Base64):", compressedResult); ``` 上述代码实现了对输入字符串的高效压缩,并输出其 Base64 表达形式[^2]。 --- #### 字符串压缩 对于已压缩并经过 Base64 编码的字符串,可通过逆向过程恢复原字符串。具体步骤如下: 1. 解析 Base64 数据; 2. 利用 `pako.inflate` 对数据进行解压缩; 3. 将解压缩后的字节流重新解析为字符串。 ##### 示例代码 ```javascript import pako from 'pako'; function decompressString(compressedBase64) { // 将 Base64 数据还原成 Uint8Array const binaryString = atob(compressedBase64); const length = binaryString.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; i++) { bytes[i] = binaryString.charCodeAt(i); } // 使用 Pako 进行解压缩 try { const inflatedBytes = pako.inflate(bytes, { to: 'string' }); // 返回解压缩后的字符串 return inflatedBytes; } catch (e) { console.error('解压缩失败:', e.message); throw e; } } // 测试函数 try { const decompressedResult = decompressString(compressedResult); console.log("解压缩后的字符串:", decompressedResult); } catch (error) { console.error(error); } ``` 此部分展示了如何安全地执行字符串的解压缩操作,并捕获可能发生的异常情况[^3]。 --- #### 性能注意事项 当处理大量数据时,应考虑压缩和解压缩的时间开销及其内存占用。如果仅需简单的小型字符串压缩,则无需担心性能瓶颈;但对于大规模数据集,建议评估实际需求后再决定是否采用更高级别的压缩策略[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专治跌倒扭伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值