使用终端命令导入Maven仓库:
mvn clean install
在Maven依赖中添加:
<dependency>
<groupId>io.github.hnuuhc</groupId>
<artifactId>often-utils</artifactId>
<version>1.2.29</version>
</dependency>
在日常网络操作中,针对经常遇到的一些问题,设计的一些常用类,目的是使代码简洁且高效,重复且复杂的操作尽可能由一段代码完成,并且尽可能地使用Java
1.正常情况下,无需额外设置参数
2.默认多线程模式下载,线程没有限制,但不应该过多,默认即可
var res = SionDownload.connect(url)
.retry(true) // 重试次数,以及重试等待间隔, true为无限重试
.thread(16) // 多线程下载,无法获取文件大小转为全量下载,默认线程10
.execute(); // 开始下载
HLSDownload.connect(url).execute(); // m3u8下载
1.支持aria2 API交互
Aria2Util.connect("127.0.0.1", 6800) //地址以及端口
.addUrl(url) //添加url,可以添加磁力,种子
.setToken("12345") //设置token
.setProxy() //为所有链接添加代理
.proxy(proxyHost, proxyPort) // 访问RPC接口的代理
// .remove(gid) // 删除指定下载
// .pause(gid) // 暂停指定下载
// .unpause(gid) // 继续指定下载
// .tellStatus(gid) //获取指定下载进度状态等信息
// .session(Aria2Method,gid) // 其它API接口
.post(); // get()
1.对一些常用的网络工具进行包装,开箱即食,代码风格一致,参数可直接相互使用
2.在发送网络错误时可以重试
3.对一些类增加scoks代理支持
4.默认配置已经可以应对大部分网站,无需设置过多参数
Document doc = HttpsUtil.connect("https://www.baidu.com")
.proxy(proxyHost, proxyPort) // or socks() 设置代理
.retry(MAX_RETRY, MILLISECONDS_SLEEP) // 重试次数,重试等待间隔
.get().parse(); // post() or execute() or get().json()
Document doc = Document.parse(String); // 构建解析对象
- 其逻辑类似于fastjson,可以很快上手
- 测试64字符1000万次解析,稳定在4500ms
var json = JSONObject.parseObject(String); // 构建JSON对象
var json = JSONArray.parseArray(String); // 构建JSON数组
json.select(".cc[0]",Class); // 位置索引
1.写操作默认为追加,append(boolean)方法修改
2.支持randomAccessFile,FileChannel,MappedByteBuffer,但是在实际应用中默认io接口的方法速度反而更快,可能是ssd的原因,大文件应该可以看出差别
String str = ReadWriteUtil.orgin(filePath).read(); //读取文件文本
List<String> lists = ReadWriteUtil.orgin(filePath).readAsLine(); //按行读取文件文本
ReadWriteUtil.orgin(filePath).write(str); //字符串按行写入文本
ReadWriteUtil.orgin(file).copy(out); // 文件复制
1.支持密码
2.支持单文件添加删除
ZipUtil.origin(file).passwd("123456").compress(file); // 文件压缩
ZipUtil.origin(file).charset("GBK").deCompress(folder); // 文件解压
1.使多线程方法参数化,可直接传入参数,应用范围很广
2.最多支持传入10个参数
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
executor.execute(new ConsumerThread(i, (index) -> { // 传参执行多线程
// TODO
}));
Future<Integer> future = executorService.submit(new FutureTaskThread<>(i, (index) -> { // 传参执行多线程带返回值
return index + 1;
}));
}
ThreadUtil.waitEnd(executor); // 等待线程结束
感谢JetBrains提供的开源开发许可证,JetBrains 通过为核心项目贡献者免费提供一套一流的开发者工具来支持非商业开源项目。