📌往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)
📃 鸿蒙(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
编译执行
编译
-
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
- 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
-
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: 小张