merge: 合并 main(新增文件下载模块)并适配 Java 21
- 版本统一为 1.9-SNAPSHOT-Java21(pom / version 常量 / README / INFO) - 合并 main 新增的文件下载模块(单线程 + HTTP Range 多线程下载)与门面接口 - 修复多线程下载:块失败异常不再被静默吞掉(解包 ExecutionException 抛出 RuntimeException)、 文件小于线程数时收敛有效线程数、线程池 finally 关闭 - 测试适配:原 downloadfile 测试不匹配 surefire 规则且依赖内网,重写为本地 HttpServer 驱动的 DownloadFileTest(单线程/多线程/小文件边界/不支持断点续传抛错) - SpotBugs 排除规则补充下载模块的遗留命名;README 测试说明同步(58 个用例) - 验证:JDK 21 下 mvn clean verify 通过(58/58 测试 + checkstyle + SpotBugs 0 问题)
This commit is contained in:
commit
5388ecaa7e
8 files changed
+492
-27
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# GNU Java Utils Library
|
||||
|
||||
一个轻量级 Java 工具库,提供压缩/解压、终端彩色输出、文件创建与管理、文件加密/解密、随机数生成、硬件标识等功能。
|
||||
一个轻量级 Java 工具库,提供压缩/解压、终端彩色输出、文件创建与管理、文件加密/解密、文件下载(单线程/多线程)、随机数生成、硬件标识等功能。
|
||||
|
||||
> 注:此项目/仓库已同步到 Github:[https://github.com/databasemysql233-debug/gnu_java_utils_library.git](https://github.com/databasemysql233-debug/gnu_java_utils_library.git)
|
||||
> 原项目/仓库链接:[https://git.opensource-studio.info/database-mysql/gnu_java_utils_library.git](https://git.opensource-studio.info/database-mysql/gnu_java_utils_library.git)
|
||||
@@ -23,7 +23,9 @@ src/main/java/top/gtb520/java/gnu/java/utils/library/
|
||||
│ └── compress.java # 压缩/解压工具类
|
||||
├── file/
|
||||
│ ├── CreateFile.java # 文件创建/保存工具类
|
||||
│ └── EncryptionAndDecryption.java # 文件加密/解密工具类
|
||||
│ ├── EncryptionAndDecryption.java # 文件加密/解密工具类
|
||||
│ └── download/
|
||||
│ └── file.java # 文件下载工具类(单线程/多线程)
|
||||
├── print/
|
||||
│ ├── echo.java # 终端彩色输出工具类
|
||||
│ └── ColorNameEnum.java # 颜色名称枚举
|
||||
@@ -273,7 +275,40 @@ File keyFile = keyDir.resolve("data.txt.key").toFile();
|
||||
File decrypted = EncryptionAndDecryption.DecryptionFile(file, EncryptionType.AES, keyFile);
|
||||
```
|
||||
|
||||
### 5. 随机生成器 (`random`)
|
||||
### 5. 文件下载 (`file/download`)
|
||||
|
||||
支持单线程和多线程文件下载,多线程模式通过 HTTP `Range` 请求分块并行下载,自动创建父目录。
|
||||
|
||||
| 方法 | 说明 | 参数 |
|
||||
|-------------------------------------------------------|---------------------------------------|-------------------------------------------------------------|
|
||||
| `file.DownloadFile(URL, destFilePanth)` | 单线程下载文件 | `URL` 文件地址,`destFilePanth` 保存路径 |
|
||||
| `file.DownloadFile(URL, destFilePanth, threadNum)` | 多线程下载文件(支持断点续传) | `URL` 文件地址,`destFilePanth` 保存路径,`threadNum` 线程数枚举 |
|
||||
|
||||
**线程数枚举 (`ThreadNum`):**
|
||||
|
||||
| 枚举值 | 线程数 |
|
||||
|-------------------|------|
|
||||
| `THREAD_NUM_II` | 2 |
|
||||
| `THREAD_NUM_IV` | 4 |
|
||||
| `THREAD_NUM_VI` | 6 |
|
||||
| `THREAD_NUM_VIII` | 8 |
|
||||
| `THREAD_NUM_X` | 10 |
|
||||
|
||||
> 多线程下载要求服务器支持 `Accept-Ranges: bytes`(HTTP 206 响应),否则将抛出 `RuntimeException`。
|
||||
> 入参为 `null` 时抛出 `IllegalArgumentException`;HTTP 请求失败时抛出 `RuntimeException`。
|
||||
|
||||
```java
|
||||
import top.gtb520.java.gnu.java.utils.library.utils.file.download.file;
|
||||
import top.gtb520.java.gnu.java.utils.library.utils.file.download.file.ThreadNum;
|
||||
|
||||
// 单线程下载
|
||||
file.DownloadFile("https://example.com/file.zip", "/path/to/save/file.zip");
|
||||
|
||||
// 多线程下载(4 线程)
|
||||
file.DownloadFile("https://example.com/file.zip", "/path/to/save/file.zip", ThreadNum.THREAD_NUM_IV);
|
||||
```
|
||||
|
||||
### 6. 随机生成器 (`random`)
|
||||
|
||||
| 方法 | 说明 | 参数 |
|
||||
|---------------------------------------------|--------------|------------------------------|
|
||||
@@ -289,7 +324,7 @@ String str = defaults.randomString(16); // 生成 16 位随机字符串(
|
||||
|
||||
> `random(start, end)` 结果包含两端;`randomString(length)` 的长度不能为负数,否则抛出 `IllegalArgumentException`。
|
||||
|
||||
### 6. 硬件标识生成器 (`hwid`)
|
||||
### 7. 硬件标识生成器 (`hwid`)
|
||||
|
||||
组合 CPU、主板、MAC 地址、硬盘序列号等信息,通过 SHA-256 生成唯一的硬件标识符(HWID)。支持 Windows、macOS、Linux 及 Android 平台。
|
||||
|
||||
@@ -307,7 +342,7 @@ System.out.println("HWID: " + hwid);
|
||||
> 单项硬件信息获取失败时自动跳过该组件(如无序列号的硬件);全部失败时返回 `"UNKNOWN_HWID"`。
|
||||
> MAC 地址优先取非回环、非虚拟网卡,避免虚拟网卡导致 HWID 漂移。
|
||||
|
||||
### 7. 版本信息 (`version`)
|
||||
### 8. 版本信息 (`version`)
|
||||
|
||||
提供项目版本信息及编译时 Java/OpenJDK 版本常量。
|
||||
|
||||
@@ -338,7 +373,7 @@ main.version.getOpenJDKRuntimeEnvironment(); // OpenJDK 运行时环境
|
||||
main.version.getOpenJDK64BitServerVM(); // OpenJDK 64-Bit Server VM
|
||||
```
|
||||
|
||||
### 8. 运行时信息 (`runtime`)
|
||||
### 9. 运行时信息 (`runtime`)
|
||||
|
||||
获取当前 Java 运行时环境信息,包括 JAR 路径、JVM 版本、位数等。
|
||||
|
||||
@@ -406,17 +441,17 @@ mvn package
|
||||
|
||||
## 测试
|
||||
|
||||
项目使用 JUnit 5 编写测试(共 53 个用例),运行:
|
||||
项目使用 JUnit 5 编写测试(共 58 个用例),运行:
|
||||
|
||||
```bash
|
||||
mvn test
|
||||
```
|
||||
|
||||
测试覆盖压缩/解压往返、Zip-Slip 恶意压缩包防护、AES/DES/RSA 加解密往返(含 8MB 大文件流式测试与错误密钥不损坏密文)、随机数边界(含 `Integer.MAX_VALUE` 上界)、彩色输出格式叠加与注入防护、临时目录创建与 HWID 稳定性。
|
||||
测试覆盖压缩/解压往返、Zip-Slip 恶意压缩包防护、AES/DES/RSA 加解密往返(含 8MB 大文件流式测试与错误密钥不损坏密文)、随机数边界(含 `Integer.MAX_VALUE` 上界)、彩色输出格式叠加与注入防护、临时目录创建与 HWID 稳定性,以及文件下载(本地 HTTP 服务器驱动:单线程、多线程、小文件边界、服务器不支持断点续传时抛错)。
|
||||
|
||||
## 使用
|
||||
|
||||
编译成功后,将 `target/gnu_java_utils_library-1.8-SNAPSHOT-Java21.jar` 放入项目依赖中,或在 Releases 中下载最新版 JAR 包。
|
||||
编译成功后,将 `target/gnu_java_utils_library-1.9-SNAPSHOT-Java21.jar` 放入项目依赖中,或在 Releases 中下载最新版 JAR 包。
|
||||
|
||||
**pom.xml 引入本地依赖:**
|
||||
|
||||
@@ -425,9 +460,9 @@ mvn test
|
||||
<dependency>
|
||||
<groupId>top.gtb520.java.gnu</groupId>
|
||||
<artifactId>gnu_java_utils_library</artifactId>
|
||||
<version>1.8-SNAPSHOT-Java21</version>
|
||||
<version>1.9-SNAPSHOT-Java21</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/gnu_java_utils_library-1.8-SNAPSHOT-Java21.jar</systemPath>
|
||||
<systemPath>${project.basedir}/lib/gnu_java_utils_library-1.9-SNAPSHOT-Java21.jar</systemPath>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user