HarmonyOS 鸿蒙Next数据流压缩支持
HarmonyOS 鸿蒙Next数据流压缩支持
与服务端交互,数据传输过大容易报错,需要对长数据传输进行压缩。
需求价值描述:有效提升传输性能。
需求提出人描述:项目限制问题,不方便使用三方库
需要实现四个方法,ZLib压缩、ZLib解压缩、GZip压缩和 GZip解压缩, 方法名和参数大致如下:
zipArrayBuffer(data: ArrayBuffer): Promise<ArrayBuffer>; unzipArrayBuffer(data: ArrayBuffer): Promise<ArrayBuffer>; gzipArrayBuffer(data: ArrayBuffer): Promise<ArrayBuffer>; unGzipArrayBuffer(data: ArrayBuffer): Promise<ArrayBuffer>;
使用c++的方法,使用 `xxx.cpp` 桥接文件中需要把 `ArrayBuffer` 类型转为 `byte*` 类型,接口返回值需要 `byte *` 类型转回 `ArrayBuffer` 类型,这两种类有没有比较方便的转换方式;还有 `napi_get_arraybuffer_info` 这个方法是获取传入的 `ArrayBuffer` 参数的方法吗,如果是该怎么使用?如果不是的话,应该怎么获取?
// 接口
export const Multiply: (a: Object, b: number) => Object;
// 实现
static napi_value Multiply(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value args[2];
napi_get_cb_info(env, info, &argc, args, NULL, NULL); // 获取Napi变量
napi_value input_array = args[0];
bool is_typedarray;
napi_is_typedarray(env, input_array, &is_typedarray);
double multiplier;
napi_get_value_double(env, args[1], &multiplier); // 获取arrayBuffer的 类型 和缓冲区 缓冲长度
napi_typedarray_type type;
napi_value input_buffer;
size_t byte_offset;
size_t i, length;
napi_get_typedarray_info(env, input_array, &type, &length, NULL, &input_buffer, &byte_offset);
void *data;
size_t byte_length;
napi_get_arraybuffer_info(env, input_buffer, &data, &byte_length); // 创建 Napi类型 的输出数据
napi_value output_buffer;
void *output_ptr = NULL;
napi_create_arraybuffer(env, byte_length, &output_ptr, &output_buffer);
napi_value output_array;
napi_create_typedarray(env, type, length, output_buffer, byte_offset, &output_array); // 根据类型 进行 数据转存
if (type == napi_uint8_array) {
uint8_t *input_bytes = (uint8_t *)(data) + byte_offset;
uint8_t *output_bytes = (uint8_t *)(output_ptr);
for (i = 0; i < length; i++) {
OH_LOG_INFO(LOG_APP, "arraybuffer input_bytes %d", input_bytes[i]);
output_bytes[i] = (uint8_t)(input_bytes[i] * multiplier);
OH_LOG_INFO(LOG_APP, "arraybuffer output_bytes %d", output_bytes[i]);
}
} else if (type == napi_float64_array) {
double *input_doubles = (double *)((uint8_t *)(data) + byte_offset);
double *output_doubles = (double *)(output_ptr);
for (i = 0; i < length; i++) {
output_doubles[i] = input_doubles[i] * multiplier;
}
} else {
napi_throw_error(env, NULL, "Typed array was of a type not expected by test.");
return NULL;
}
return output_array;
}
更多关于HarmonyOS 鸿蒙Next数据流压缩支持的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS鸿蒙Next在数据流压缩方面采用了多种技术来优化数据传输和存储效率。系统内置了高效的压缩算法,支持对数据流进行实时压缩和解压缩,以减少网络传输带宽和存储空间的占用。鸿蒙Next的压缩技术主要包括以下几个方面:
-
Zstandard (zstd) 压缩:鸿蒙Next支持Zstandard压缩算法,该算法在压缩速度和压缩比之间提供了良好的平衡,适用于多种数据类型和应用场景。
-
Brotli 压缩:Brotli是一种现代的压缩算法,特别适用于文本数据的压缩,能够在保持高压缩比的同时提供较快的压缩和解压缩速度。
-
LZ4 压缩:LZ4是一种极速的压缩算法,适合对实时性要求较高的场景,如游戏、视频流等,能够在极短的时间内完成数据压缩和解压缩。
-
GZIP 压缩:GZIP是一种广泛使用的压缩格式,鸿蒙Next支持GZIP压缩,兼容性较好,适用于多种网络传输和存储场景。
-
自定义压缩策略:鸿蒙Next允许开发者根据具体应用需求,自定义压缩策略,选择不同的压缩算法和参数,以达到最佳的性能和效率。
-
智能压缩:系统能够根据数据类型和传输环境,自动选择最合适的压缩算法,实现智能化的压缩管理。
鸿蒙Next的数据流压缩技术不仅提升了系统的整体性能,还降低了网络传输的成本,优化了用户体验。通过高效的压缩算法,系统能够在保证数据完整性和安全性的同时,显著减少数据传输和存储的资源消耗。
HarmonyOS 鸿蒙Next 在数据流压缩方面提供了多种支持,旨在提升数据传输效率和节省带宽。系统内置了多种压缩算法,如GZIP、ZIP等,开发者可以根据需求选择合适的压缩方式。此外,鸿蒙Next还支持自定义压缩策略,允许开发者根据具体场景优化压缩效果。通过这些功能,鸿蒙Next能够有效减少数据传输量,提升应用性能。