##HarmonyOS Next实战##HarmonyOS SDK应用服务##教育##
目标:封装字符串工具类,实现常用的功能,如检查字符串是否为空,将字符串转为字节流等。
知识点:
Buffer对象用于表示固定长度的字节序列,是专门存放二进制数据的缓存区。
buffer.from:根据指定数组创建新的Buffer对象。
BufferEncoding:表示支持的编码格式类型。
util.TextEncoder
util.TextEncoder(encoding?: string);
用于将字符串编码为字节数组,支持多种编码格式。
需要注意的是,在使用TextEncoder进行编码时,不同编码格式下字符所占的字节数是不同的,在使用TextEncoder时需要明确指定要使用的编码格式,以确保编码结果正确。
util.TextDecoder.create
static create(encoding?: string): TextEncoder
创建TextEncoder对象的方法。
util.Base64Helper()
Base64Helper类提供Base64编解码和Base64URL编解码功能。Base64编码表包含A-Z、a-z、0-9这62个字符,以及"+"和"/"这两个特殊字符。在编码时,将原始数据按3个字节一组进行划分,得到若干个6位的数字,然后使用Base64编码表中对应的字符来表示这些数字。如果最后剩余1或2个字节,则需要使用"="字符进行补齐。Base64URL编码表包含A-Z、a-z、0-9以及"-"和"_"64个字符,Base64URL编码结果不含"="。
实战:
import { buffer, util } from "@kit.ArkTS";
/**
* 字符串工具
*/
export class StringKit {
/**
* 字符串是否为空
* @param str 被检测的字符串
* @return 当字符串为undefined、null或者空字符串时,返回true,否则返回false
*/
static isEmpty(str: string | undefined | null): boolean {
return str == undefined || str == null || str == '';
}
/**
* 字符串是否不为空
* @param str 被检测的字符串
* @returns 当字符串为非空字符串时,返回true,否则返回false
*/
static isNotEmpty(str: string | undefined | null) {
return !StringKit.isEmpty(str);
}
/**
* 字符串转Uint8Array
* @param str 字符串
* @param encoding 编码,默认'utf-8'
* @returns Uint8Array
*/
public static stringToUint8Array(str: string, encoding: buffer.BufferEncoding = 'utf-8'): Uint8Array {
const textEncoder = new util.TextEncoder(encoding);
return textEncoder.encodeInto(str);
}
/**
* Uint8Array转字符串
* @param uint8Array Uint8Array
* @param encoding 编码,默认'utf-8'
* @returns 字符串
*/
static uint8ArrayToString(uint8Array: Uint8Array, encoding: buffer.BufferEncoding = 'utf-8'): string {
const textDecoder = util.TextDecoder.create(encoding, { ignoreBOM: true });
return textDecoder.decodeToString(uint8Array);
}
/**
* 字符串转Base64字符串
* @param str 字符串
* @returns Base64字符串
*/
static stringToBase64(str: string): string {
const uint8Array = StringKit.stringToUint8Array(str);
const base64Helper = new util.Base64Helper();
return base64Helper.encodeToStringSync(uint8Array);
}
/**
* Base64字符串转字符串
* @param base64Str Base64字符串
* @returns 字符串
*/
static base64ToString(base64: string): string {
let base64Helper = new util.Base64Helper();
const uint8Array = base64Helper.decodeSync(base64);
return StringKit.uint8ArrayToString(uint8Array)
}
/**
* 字符串转Buffer
* @param str 字符串
* @param encoding 编码,默认'utf-8'
* @returns Buffer
*/
static stringToBuffer(str: string, encoding: buffer.BufferEncoding = 'utf-8'): buffer.Buffer {
return buffer.from(str, encoding);
}
/**
* 字符串转ArrayBuffer
* @param str 字符串
* @param encoding 编码,默认'utf-8'
* @returns ArrayBuffer
*/
static stringToArrayBuffer(str: string, encoding: buffer.BufferEncoding = 'utf-8'): ArrayBuffer {
return buffer.from(str, encoding).buffer;
}
/**
* ArrayBuffer转字符串
* @param arrayBuffer ArrayBuffer
* @param encoding 编码,默认'utf-8'
* @returns string
*/
static arrayBufferToString(arrayBuffer: ArrayBuffer, encoding: buffer.BufferEncoding = 'utf-8'): string {
return buffer.from(arrayBuffer).toString(encoding);
}
/**
* ArrayBuffer转Uint8Array
* @param arrayBuffer ArrayBuffer
* @returns Uint8Array
*/
static arrayBufferToUint8Array(arrayBuffer: ArrayBuffer): Uint8Array {
return new Uint8Array(arrayBuffer)
}
/**
* Uint8Array转ArrayBuffer
* @param uint8Array
* @returns ArrayBuffer
*/
static unit8ArrayToArrayBuffer(uint8Array: Uint8Array): ArrayBuffer {
return uint8Array.buffer as ArrayBuffer;
}
}