鸿蒙开发仓颉语言:工具类—— bzip2-ffi & vcard4cj

📌往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)

📃 鸿蒙(HarmonyOS)北向开发知识点记录~

📃 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

📃 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

📃 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

📃 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

📃 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

📃 记录一场鸿蒙开发岗位面试经历~

📃 持续更新中……


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

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 用例书写参考:https://gitee.com/HW-PLLab/cangjie-library-pages/wikis 的门禁测试脚本使用方式

功能示例

文件读取保存示例

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: 小张
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值