【仓颉三方库】工具类—— bzip2-ffi & vcard4cj

92 阅读4分钟

bzip2-ffi

介绍

bzip2-ffi是一款文件压缩和解压缩工具。

特性

  • 🚀 文件压缩和解压缩

未来规划

  • 丰富接口

架构

源码目录

.
├── doc
├── lib
├── README.md
├── src
│   └── bz2
│       └── bzutils.cj
│       └── native.cj
├── third_party
└── test
    ├── HLT
    ├── LLT
    └── UT
  • doc存放库的设计文档、提案、库的使用文档
  • src存放库源码目录
  • test存放测试用例,包括HLT用例、LLT 用例和UT用例
  • lib存放bizp2-ffi源码动态库
  • third_party存放c相关引用

接口说明

主要是核心类和成员函数说明,详情见 API

class BZUtils

文件压缩

func compress(fileName: String): Int32
  • fileName:需要压缩文件的名称

文件解压缩

func decompress(fileName: String): Int32
  • fileName:需要解压缩文件的名称
class BZCommon

设置全局变量

  • opMode:设置压缩模式,1:压缩,2:解压缩‘
  • srcMode:源文件模式,目前只支持文件到文件模式,默认值为3;
  • forceOverwrite:强制覆盖输出文件;
  • keepInputFiles:保留输入文件;
  • smallMode:在压缩或解压缩过程中降低内存用量;
  • verbosity:详尽模式 -- 显示每个被处理文件的压缩率;
  • blockSize100k:压缩时将块长度设置为100k,200k...900k,对应值为1-9。
func GlobalParamSet(args: GlobalParam): Int32

编译执行

编译

  1. linux x86_64 编译

    进入bzip2-ffi根目录,执行下面语句

    cd third_party/third_party_bzip2-OpenHarmony-v3.1-Release
    make -f Makefile2Cangjie clean && make -f Makefile2Cangjie
    cp liblibbz2.so ../../lib
    cd ../../
    cpm clean && cpm build
  1. Windows编译

进入bzip2-ffi根目录,执行下面语句

    cd third_party/third_party_bzip2-OpenHarmony-v3.1-Release
    make -f Makefile2Cangjie clean && make -f Makefile2Cangjie EXE=dll
    cp liblibbz2.dll ../../lib
    cd ../../
    cpm clean && cpm build
  1. ohos编译

    进入bzip2-ffi根目录,执行下面语句(其中/usr1/ohos/llvm/bin/是ohos编译器路径,/usr1/ohos/llvm/include/aarch64-linux-ohos是ohos的头文件,请自行设置)

    cd third_party/third_party_bzip2-OpenHarmony-v3.1-Release
    make -f Makefile2Cangjie clean && make -f Makefile2Cangjie CC="/usr1/ohos/llvm/bin/clang" CFLAGS="-I/usr1/ohos/llvm/include/aarch64-linux-ohos --target=aarch64-linux-ohos" STRIP="/usr1/ohos/llvm/bin/llvm-strip"
    cp liblibbz2.so ../../lib
    cd ../../
    cpm clean && cpm build

测试

压缩示例

示例描述

import bz2ffi.*
import std.os.posix.*
import std.fs.*

main() {
    var args = GlobalParam()
    var path2: String = getcwd()
    var ret: Int32 = BZCommon.globalParamSet(args)
    if (ret != 0) {
        return 1
    }
    ret = BZUtils.compress("${path2}/a.txt")   //当前目录下生成a.txt.bz2压缩文件
    if (ret != 0) {
        return 1
    }
    var rFs: File = File("${path2}/a.txt.bz2", Open(true, true))
    if (rFs.canRead()) {
        return 0
    } else {
        return 1
    }
}

执行示例:

# 将上述代码保存为: test/LLT/test_compress_01.cj

# 新建一个待压缩文件: 
echo 'helloworld' > test/LLT/a.txt

# 使用cjpm编译
cjpm build

# 使用cjc执行用例
 cjc  --import-path /target/release -L /lib/ -l libbz2   -L /target/release/bz2ffi -l bz2ffi  test_compress_01.cj 

# test_compress_01.cj已被编译并执行main方法
# 进入执行用例的临时目录
cd 

# 解压生成的a.txt.bz2
bzip2 -d a.txt.bz2

# 验证解压后的内容
cat a.txt
DD一下:欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。
`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

vcard4cj

介绍

vcard4cj库,主要用来解析VCard文件(vcf)

特性

  • 🚀 saveToVCF
  • 💪 readFromVCF

路线

## 架构

源码目录

.
├── README.md
├── doc
│   ├── assets     
│   ├── cjov     
│   ├── feature_api.md     
│   └── design.md  
├── src
│   ├── address_type.cj
|   ├── email_type.cj
|   ├── exception.cj
|   ├── media_utility.cj
|   ├── telephone_type.cj
|   ├── vcard_address.cj
|   ├── vcard_name.cj
|   └── vcard.cj
└── test   
|   ├── HLT
|   ├── LLT
|   └── UT
├── CHANGELOG.md
├── gitee_gate.cfg
├── LICENSE.txt
└── README.OpenSource
  • doc存放库的设计文档、使用文档、需求文档、LLT 用例覆盖报告
  • src是库源码目录
  • test存放 HLT 测试用例、LLT 自测用例和 UT 单元测试用例

接口说明

主要是核心类和成员函数说明,详情见 feature_api

使用说明

编译

Linux环境编译
git clone https://gitee.com/HW-PLLab/vcard4cj.git  ---> 拉取代码
git clone https://gitee.com/HW-PLLab/testJekins.git  ---> 拉取编译脚本
cd vcard4cj                              ---> 进入到vcard目录下
cp -r ../testJekins/src/ci_test .     ---> 将ci test复制到vCard的根目录

python3 ci_test/main.py build   ---> 编译
Windows环境编译
git clone https://gitee.com/HW-PLLab/vcard4cj.git  ---> 拉取代码
cd vcard4cj                              ---> 进入到vcard目录下
cpm build -V   ---> 编译
cpm test - V   ---> 执行 test/LLT 用例

test/LLT 用例书写参考:gitee.com/HW-PLLab/ca… 的门禁测试脚本使用方式

功能示例

文件读取保存示例

main () {
    let vCard = VCard()
    vCard.addFormattedName("Darth Vader")
    vCard.addEmail(EmailType.X400, "xxx@xx.com")
    vCard.saveToVCF("${path}/newcard.vcf")
    vCard.readFromVCF("${path}/newcard.vcf")
    var vCardName = VCardName(familyName:"张",givenName:"三",setitionalNames:"小张",namePrefix:"",nameSuffix:"")

    vCard.addName(vCardName)
    let n = vCard.getName()
    println(vCard.getFormattedName())
    println(vCard.getEmail(EmailType.X400))
    println("familyName: ${n.getFamilyName()}")
    println("givenName:${n.getGivenName()}")
    println("setitionalNames: ${n.getSetitionalNames()}")
}

执行结果如下

Darth Vader
xxx@xx.com
familyName: 张
givenName:三
setitionalNames: 小张