【仓颉三方库】工具类——zip4cj & zlib4cj

zip4cj

介绍

zip4cj 是基于仓颉语言实现的文件压缩和解压缩,目前基本实现了zip 的压缩和解压缩。

特性

  • 🚀 zip 压缩和解压缩。

未来规划

  • 实现压缩解密和加密

  • 支持压缩和解压进度监控

架构

源码目录

shell 复制代码
.
├── LICENSE  
├── README.md
├── doc
│   ├── assets
│   └── cjcov
├── src                             // 源码
│   ├── crypto                  // 加解密功能包
│   │   ├── engine              
│   │   └── PBKDF2
│   ├── exception               // 异常类包
│   ├── headers                 // zip文件头包
│   ├── io                      // zip IO流包
│   │   ├── inputstream
│   │   └── outputstream
│   ├── model                   // zip 配置和参数模式包
│   │   └── enums
│   ├── progress                // 进度监控包
│   ├── tasks                   // 支持多种压缩和解压缩方式包
│   ├── util                    // 工具包
│   └── zip_file.cj             // 主程序入口类
└── test
    ├── HLT
    ├── LLT
    └── UT
  • doc 存放库的设计文档、提案、库的使用文档、LLT 覆盖率报告
  • src 是库源码目录
  • test 存放测试用例,包括 HLT 用例、LLT 用例和 UT 用例

类和接口说明:

详情见 API

使用说明

编译

cj 复制代码
cjpm update
cjpm build

功能示例

zip 解压
cj 复制代码
import zip4cj.*                       // 引入zip4cj包 
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() { 
    let zipFile = ZipFile("MobaXtermbackup.zip")  // 创建ZipFile类
    zipFile.setRunInThread(false)                 // 设置是否用子线程运行任务
    zipFile.extractAll("./output")                // 解压到 output 文件夹, 文件夹不存在则创建
    0
}
zip 创建zip文件
cj 复制代码
import zip4cj.*                      // 引入zip4cj包 
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() { 
    let zipParameters = ZipParameters()         // 创建 zip 参数配置 类
    zipParameters.setCompressionMethod(CompressionMethod.STORE)  // 设置压缩方式为存储
    let zipFile = ZipFile("output.zip")         // 创建ZipFile类, 并指定文件为 output.zip
    let files = [                               // 创建 文件集合
        Path("123.txt")
    ]
    zipFile.createSplitZipFile(files, zipParameters, false, InternalZipConstants.MIN_SPLIT_LENGTH)                           // 创建文件
    return 0
}
压缩文件夹
cj 复制代码
import zip4cj.*                      // 引入zip4cj包 
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() { 
    let zipParameters = ZipParameters()         // 创建 zip 参数配置 类
    zipParameters.setCompressionMethod(CompressionMethod.DEFLATE)  // 设置压缩方式为DEFLATE压缩
    let zipFile = ZipFile("output.zip")         // 创建ZipFile类, 并指定文件为 output.zip
    zipFile.addFolder("test")                   // 添加文件夹压缩
    return 0
}
在zip文件中重命名/删除/添加文件
cj 复制代码
import zip4cj.*                      // 引入zip4cj包 
import std.os.posix.*
import std.fs.*
import std.sync.*
import std.time.*
main() { 
    let zipParameters = ZipParameters()         // 创建 zip 参数配置 类
    zipParameters.setCompressionMethod(CompressionMethod.DEFLATE)  // 设置压缩方式为DEFLATE压缩
    let zipFile = ZipFile("output.zip")         // 创建ZipFile类, 并指定文件为 output.zip
    zipFile.removeFile("a.txt")                               // 删除文件
    zipFile.renameFile("old_file", "new_file")                // 重命名文件
    zipFile.addFile(Path("a.txt"), parameters: zipParameters) // 添加文件
    var paths=[
        Path("1.mp3")
        Path("12.mp3")
        Path("123.mp3")
        Path("1234.mp3")
    ]
    zipFile.addFiles(paths, parameters: zipParameters)        // 添加文件集合
    return 0
}
DD一下: 欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。
erlang 复制代码
`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。`
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.鸿蒙版性能优化指南
.......

zlib4cj

简介

本仓库是使用仓颉语言重写 zlib 库,参考 github.com/madler/zlib...

特性

  • 🚀 支持压缩和解压功能
  • 💪 支持流式压缩

架构

源码目录:

shell 复制代码
.
├── README.md
├── doc
│   ├── assets     
│   ├── cjcov
│   ├── design.md
│   ├── feature_api.md
├── src
│   └── deflate.cj
│   └── inflate.cj
│   └── stream.cj
│   └── zlib.cj
│   └── zutil.cj
└── test   
    ├── HLT
    ├── LLT
    └── UT
  • doc 存放库的设计文档、提案、库的使用文档、LLT 用例覆盖报告
  • src 存放库源码的目录
  • test 存放测试用例,包括 HLT 用例、LLT 用例和 UT 用例

类和接口说明:

详情见 API

使用说明

编译

cj 复制代码
cjpm build

功能示例

zlib 使用示例
cj 复制代码
import zlib4cj.*
import std.collection.* 
import std.io.*
import std.os.posix.*
import std.fs.*

main() { 
    var path: String = getcwd()
    var fileName: String = "${path}/README.md"
    var data: Array<UInt8> = readFile(fileName) 

    // wrap: ZLIB success
    if(testCompressAndUncompress(data) != 0) {
        return -1
    } 
    return 0
}

func testCompressAndUncompress(data: Array<UInt8>): Int64 {
    let buf: ArrayList<UInt8> = Zlib.compress(data, wrap: ZLIB)
    let arr: Array<UInt8> = Array<UInt8>(buf.size, { i => buf[i] })
    let result: ArrayList<UInt8> = Zlib.uncompress(arr, wrap: ZLIB)
    return checkResult(data, result, "testCompressAndUncompress")     
}
func readFile(path: String): Array<UInt8> { 
    var data = Array<UInt8>()
    var fs = File(path, OpenOption.Open(true, false) )
    var readnum: Int64 = 0
    if (fs.canRead()) {
        data = fs.readToEnd()
    }
    return data
}   
func compareBuffer(input: Array<UInt8>, uncompr: ArrayList<UInt8>): Bool {
    if (input.size != uncompr.size) {
        return false
    }
    for (i in 0..input.size) {
        if (input[i] != uncompr[i]) {
            return false
        }
    }
    return true
}
func checkResult(input: Array<UInt8>, uncompr: ArrayList<UInt8>, desc: String): Int64 {
    if (compareBuffer(input, uncompr)) {
        return 0
    } else {
        return -1
    }
}

运行结果如下:

复制代码
0

约束与限制

在下述版本验证通过:

cj 复制代码
Cangjie Version: 0.53.4
相关推荐
盐焗西兰花7 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
lbb 小魔仙11 小时前
【HarmonyOS实战】React Native 表单实战:在 OpenHarmony 上构建高性能表单
react native·华为·harmonyos
一只大侠的侠14 小时前
React Native开源鸿蒙跨平台训练营 Day16自定义 useForm 高性能验证
flutter·开源·harmonyos
早點睡39015 小时前
高级进阶 React Native 鸿蒙跨平台开发:@react-native-community-slider 滑块组件
react native·react.js·harmonyos
一只大侠的侠15 小时前
Flutter开源鸿蒙跨平台训练营 Day11从零开发商品详情页面
flutter·开源·harmonyos
一只大侠的侠15 小时前
React Native开源鸿蒙跨平台训练营 Day18自定义useForm表单管理实战实现
flutter·开源·harmonyos
一只大侠的侠16 小时前
React Native开源鸿蒙跨平台训练营 Day20自定义 useValidator 实现高性能表单验证
flutter·开源·harmonyos
听麟16 小时前
HarmonyOS 6.0+ 跨端智慧政务服务平台开发实战:多端协同办理与电子证照管理落地
笔记·华为·wpf·音视频·harmonyos·政务
前端世界17 小时前
从单设备到多设备协同:鸿蒙分布式计算框架原理与实战解析
华为·harmonyos
一只大侠的侠18 小时前
Flutter开源鸿蒙跨平台训练营 Day12从零开发通用型登录页面
flutter·开源·harmonyos