HarmonyOS 鸿蒙Next 请问使用api10或者api11的,关于ZLib

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 请问使用api10或者api11的,关于ZLib

@ohos.zlib,有没有扩展api,支持数据流的压缩和解压缩?

自己扩展C语言库这种造轮子行为有点不太想花时间做,官方有了就再等等,我不新个人开发者鸿蒙一直不开放api10或者11

7 回复

解压

import zlib from '@ohos.zlib';
import base from '@ohos.base';

async function demo() { let str = ‘hello world!’; let arrayBufferIn = new ArrayBuffer(str.length); let byteArray = new Uint8Array(arrayBufferIn); for (let i = 0, j = str.length; i < j; i++) { byteArray[i] = str.charCodeAt(i) } let arrayBufferOut = new ArrayBuffer(100); let zip = zlib.createZipSync(); await zip.compress(arrayBufferOut, arrayBufferIn, 12).then((data) => { console.info(‘compress success’); }).catch((errData: base.BusinessError) => { console.error(errData is errCode:${errData.code} message:${errData.message}); }) await zip.uncompress(arrayBufferIn, arrayBufferOut, 20).then((data) => { console.info(‘uncompress success’); }).catch((errData: base.BusinessError) => { console.error(errData is errCode:${errData.code} message:${errData.message}); }) }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

api12终于等到官方原生流压缩和解压

import zlib from '@ohos.zlib';
import base from '@ohos.base';

let str = ‘hello world!’; let arrayBufferIn = new ArrayBuffer(str.length); let byteArray = new Uint8Array(arrayBufferIn);

for (let i = 0, j = str.length; i < j; i++) { byteArray[i] = str.charCodeAt(i) }

let arrayBufferOut = new ArrayBuffer(100); let zip = zlib.createZipSync();

zip.compress(arrayBufferOut, arrayBufferOut, 20).then((data) => { console.info(‘compress success:’); }).catch((errData: base.BusinessError) => { console.error(errData is errCode:${errData.code} message:${errData.message}); })<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

https://ohos-rs.github.io/ecosystem/package/snappy.html

提供了一系列的NATIVE实现,有其他需求可以提PR 、issue

试了有点问题,安装说明安装之后oh_modules里有@ohos-rs的扩展包了,然后 import {compressSync} from ‘@ohos-rs/snappy’ 显示有错误 Module ‘"…/…/…/…/…/oh_modules/@ohos-rs/snappy"’ has no exported member ‘compressSync’. <tsCheck> 可以运行,执行const a = compressSync(“hello world”, { copyOutputData: false }); 有异常

可以提issue给复现的流程看看。

关于HarmonyOS 鸿蒙Next在使用api10或api11时关于ZLib的问题,以下是一些专业解答:

在HarmonyOS中,ohos.zlib库主要用于zip格式文件的压缩和解压缩操作。对于api10和api11版本,若需要对字符串或其他数据流进行压缩和解压缩,可能需要通过其他方式实现,因为ohos.zlib原生API主要支持文件级别的操作。

一种可能的解决方案是采用NAPI编程,在C/C++中实现gzip等压缩算法,并通过异步线程处理压缩和解压缩任务,以避免阻塞主线程。这种方法需要一定的C/C++和NAPI编程基础。

另外,也可以考虑使用第三方库如pako等,这些库提供了更灵活的压缩和解压缩功能,并且易于在JavaScript环境中集成。但请注意,使用第三方库可能需要处理兼容性和依赖性问题。

如果上述方法仍无法满足需求,建议查阅最新的HarmonyOS开发文档或联系华为开发者社区以获取更详细的帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部