一时兴起,觉得 Windows 上的 WinRar 和 7Z 都不是很好用,想自己设计一个 压缩软件来用。
那么首先进行技术选型。
Linux 因为众所周知的原因不需要这种屑东西,
所以我们的压缩软件主要在 Windows 上用,不用考虑跨平台。显然 Windows 软件
一定是需要 GUI 的。GUI 框架无外乎 Qt
、Winform
、WPF
、Electron
、awt
、swing
和 JavaFX
等。
Qt
用 C++
开发,也有 pyqt
这种 Python
的变种,但是总的来说太老套,设计
理念有些落后;Winform
和 WPF
都是微软家的,WPF
是基于 Winform
存在的一些问题开发
出来的,更先进一些,可以考虑;Electron
可以借用 Web 开发的技术(如 Vue
、ElementUI
),
UI 设计会更简单一些,Javascript
的库也比较多;awt
、swing
和 JavaFX
都是 Java
系的,
其中 JavaFX
是 Java
最新的 GUI 框架,也比较 match 我最熟悉的 Java
技术栈。
然后寻找核心的支持压缩的包。WPF
可以在 dotnet core
上用 C#
开发,所以我们主要寻找
C#
的包,鉴于 dotnet core
上与 C++
较好的互操作性,dll 也可考虑;除了 Github
外
还可以在 dotnet
包管理平台 nuget 上寻找包;
C#
的一些包可用性还是不错的。Electron
基于 NodeJS
,需要 Javascript
或者 Typescript
的
包,可以在包管理平台 npm 查找;结果有些失望,找到的包的
功能都相对较弱,可用性不强;又鉴于我对 Javascript
开发的体验不佳,所以 Electron
方案
也 pass。Java
的生态还是很丰富的,可以在 Maven Central 寻找
包;最成熟的似乎是 Apache Commons Compress,但是它当前版本不支持分卷,不支持常用的 rar 格式,对压缩文件
内部条目的属性也支持偏少;另一个选择是 sevenzipjbind,它是压缩领域著名的 7Z SDK
的 Java Binding 版本,个人开发、文档还算全、关注度略低,
但是因为 7Z Engine
的加持,它的功能更加全面、速度更快。
最后,我们希望 GUI 尽可能美观,所以还需要 UI 框架或者皮肤。WPF
主要有 Avalonia、ModernWpf 和 MaterialDesignInXamlToolkit 三种选项。但是我后来发现 WPF
的界面编写需要用到一种
类似于 xml 的标记语言 xaml,而 JavaFX
可以改用 ScalaFX
Wrapper 以享受用 Scala
原生 DSL 编写的快感,所以我最终确定用 JavaFX(ScalaFX
) 技术栈。专用于 JavaFX
的 UI 框架
主要有 JFoenix 和 JMetro;前者风格是 Material Design
,更成熟、关注度更高,但是
框架侵入性强;后者风格是 Win10
风,更轻量、使用简单,也还算美观;最终我决定选择后者。
综上,我们用 JavaFX,准确来说是 Scala
版本的 ScalaFX,作为 GUI 框架;搭配 UI 库 JMetro 使用;而用 sevenzipjbind 提供压缩、解压缩功能。
如果你喜欢我的文章,请我吃根冰棒吧 (o゜▽゜)o ☆
最后附上 GitHub:https://github.com/gonearewe