开发者社区> 沉默王二> 正文

不要再重复造轮子了,Hutool这款开源工具类库贼好使(3)

简介: 不要再重复造轮子了,Hutool这款开源工具类库贼好使
+关注继续查看

12、双向查找 Map


Guava 中提供了一种特殊的 Map 结构,叫做 BiMap,实现了一种双向查找的功能,可以根据 key 查找 value,也可以根据 value 查找 key,Hutool 也提供这种 Map 结构。


BiMap<String, String> biMap = new BiMap<>(new HashMap<>());
biMap.put("wanger", "沉默王二");
biMap.put("wangsan", "沉默王三");
// get value by key
biMap.get("wanger");
biMap.get("wangsan");
// get key by value
biMap.getKey("沉默王二");
biMap.getKey("沉默王三");


1

在实际的开发工作中,其实我更倾向于使用 Guava 的 BiMap,而不是 Hutool 的。这里提一下,主要是我发现了 Hutool 在线文档上的一处错误,提了个 issue(从中可以看出我一颗一丝不苟的心和一双清澈明亮的大眼睛啊)。


image.png

ImgUtil.scale(
        FileUtil.file("hutool/wangsan.jpg"),
        FileUtil.file("hutool/wangsan_small.jpg"),
        0.5f
);
裁剪图片:
ImgUtil.cut(
        FileUtil.file("hutool/wangsan.jpg"),
        FileUtil.file("hutool/wangsan_cut.jpg"),
        new Rectangle(200, 200, 100, 100)
);

13、图片工具


Hutool 封装的 ImgUtil 可以对图片进行缩放、裁剪、转为黑白、加水印等操作。


缩放图片:


ImgUtil.scale(
        FileUtil.file("hutool/wangsan.jpg"),
        FileUtil.file("hutool/wangsan_small.jpg"),
        0.5f
);


添加水印:


ImgUtil.pressText(//
        FileUtil.file("hutool/wangsan.jpg"),
        FileUtil.file("hutool/wangsan_logo.jpg"),
        "沉默王二", Color.WHITE,
        new Font("黑体", Font.BOLD, 100),
        0,
        0,
        0.8f
);


趁机让大家欣赏一下二哥帅气的真容。




14、配置文件


众所周知,Java 中广泛应用的配置文件 Properties 存在一个特别大的诟病:不支持中文。每次使用时,如果想存放中文字符,就必须借助 IDE 相关插件才能转为 Unicode 符号,而这种反人类的符号在命令行下根本没法看。

于是,Hutool 的 Setting 运用而生。Setting 除了兼容 Properties 文件格式外,还提供了一些特有功能,这些功能包括:


各种编码方式支持

变量支持

分组支持

先整个配置文件 example.setting,内容如下:


name=沉默王二

age=18


再来读取和更新配置文件:


public class SettingDemo {
    private final static String SETTING = "hutool/example.setting";
    public static void main(String[] args) {
        // 初始化 Setting
        Setting setting = new Setting(SETTING);
        // 读取
        setting.getStr("name", "沉默王二");
        // 在配置文件变更时自动加载
        setting.autoLoad(true);
        // 通过代码方式增加键值对
        setting.set("birthday", "2020年09月29日");
        setting.store(SETTING);
    }
}


15、日志工厂


Hutool 封装的日志工厂 LogFactory 兼容了各大日志框架,使用起来也非常简便。


public class LogDemo {
    private static final Log log = LogFactory.get();
    public static void main(String[] args) {
        log.debug("难得糊涂");
    }
}


先通过 LogFactory.get() 自动识别引入的日志框架,从而创建对应日志框架的门面 Log 对象,然后调用 debug()、info() 等方法输出日志。


如果不想创建 Log 对象的话,可以使用 StaticLog,顾名思义,一个提供了静态方法的日志类。


StaticLog.info("爽啊 {}.", "沉默王二的文章");


16、缓存工具


CacheUtil 是 Hutool 封装的创建缓存的快捷工具类,可以创建不同的缓存对象:


FIFOCache:先入先出,元素不停的加入缓存直到缓存满为止,当缓存满时,清理过期缓存对象,清理后依旧满则删除先入的缓存。

Cache<String, String> fifoCache = CacheUtil.newFIFOCache(3);

fifoCache.put("key1", "沉默王一");

fifoCache.put("key2", "沉默王二");

fifoCache.put("key3", "沉默王三");

fifoCache.put("key4", "沉默王四");


// 大小为 3,所以 key3 放入后 key1 被清除

String value1 = fifoCache.get("key1");



LFUCache,最少使用,根据使用次数来判定对象是否被持续缓存,当缓存满时清理过期对象,清理后依旧满的情况下清除最少访问的对象并将其他对象的访问数减去这个最少访问数,以便新对象进入后可以公平计数。

Cache<String, String> lfuCache = CacheUtil.newLFUCache(3);


lfuCache.put("key1", "沉默王一");

// 使用次数+1

lfuCache.get("key1");

lfuCache.put("key2", "沉默王二");

lfuCache.put("key3", "沉默王三");

lfuCache.put("key4", "沉默王四");


// 由于缓存容量只有 3,当加入第 4 个元素的时候,最少使用的将被移除(2,3被移除)

String value2 = lfuCache.get("key2");

String value3 = lfuCache.get("key3");



LRUCache,最近最久未使用,根据使用时间来判定对象是否被持续缓存,当对象被访问时放入缓存,当缓存满了,最久未被使用的对象将被移除。

Cache<String, String> lruCache = CacheUtil.newLRUCache(3);


lruCache.put("key1", "沉默王一");

lruCache.put("key2", "沉默王二");

lruCache.put("key3", "沉默王三");

// 使用时间近了

lruCache.get("key1");

lruCache.put("key4", "沉默王四");


// 由于缓存容量只有 3,当加入第 4 个元素的时候,最久使用的将被移除(2)

String value2 = lruCache.get("key2");

System.out.println(value2);



17、加密解密


加密分为三种:


对称加密(symmetric),例如:AES、DES 等

非对称加密(asymmetric),例如:RSA、DSA 等

摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC 等

Hutool 针对这三种情况都做了封装:


对称加密 SymmetricCrypto

非对称加密 AsymmetricCrypto

摘要加密 Digester

快速加密工具类 SecureUtil 有以下这些方法:


1)对称加密


SecureUtil.aes

SecureUtil.des

2)非对称加密


SecureUtil.rsa

SecureUtil.dsa

3)摘要加密


SecureUtil.md5

SecureUtil.sha1

SecureUtil.hmac

SecureUtil.hmacMd5

SecureUtil.hmacSha1

只写一个简单的例子作为参考:


public class SecureUtilDemo {

   static AES aes = SecureUtil.aes();

   public static void main(String[] args) {

       String encry = aes.encryptHex("沉默王二");

       System.out.println(encry);

       String oo = aes.decryptStr(encry);

       System.out.println(oo);

   }

}


18、其他类库


Hutool 中的类库还有很多,尤其是一些对第三方类库的进一步封装,比如邮件工具 MailUtil,二维码工具 QrCodeUtil,Emoji 工具 EmojiUtil,小伙伴们可以参考 Hutool 的官方文档:https://www.hutool.cn/


项目源码地址:https://github.com/looly/hutool


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!
101 0
我用这一招让团队的开发效率提升了 100%!
我在一家做微信营销的公司干技术 leader,带 40 多个人,公司名就不说了。在这个位置上做了好几年,把团队从小带大,公司虽然不算风口浪尖上的高增长业务,但技术这块儿也从来没出过什么问题,我还是蛮自豪的。
136 0
《保姆教程二》idea 的使用技巧,墙裂推荐收藏!!!疯狂提升代码开发效率和代码质量
在平常的开发中,发现一些同事对Idea 使用的不是很熟练,仅仅用来编辑,编译,不能很好的发挥Idea 的神奇。整理了下我平常用的一些技巧,希望你能从中学习到一些。开始吧
60 0
研发实用工具,推荐一款代码统计神器GitStats
研发实用工具,推荐一款代码统计神器GitStats
626 0
真不是我吹,Spring里这款牛逼的网络工具库我估计你都没用过!(下)
现如今的 IT 项目,由服务端向外发起网络请求的场景,基本上处处可见! 传统情况下,在服务端代码里访问 http 服务时,我们一般会使用 JDK 的 HttpURLConnection 或者 Apache 的 HttpClient,不过这种方法使用起来太过繁琐,而且 api 使用起来非常的复杂,还得操心资源回收。
104 0
真不是我吹,Spring里这款牛逼的网络工具库我估计你都没用过!(上)
现如今的 IT 项目,由服务端向外发起网络请求的场景,基本上处处可见! 传统情况下,在服务端代码里访问 http 服务时,我们一般会使用 JDK 的 HttpURLConnection 或者 Apache 的 HttpClient,不过这种方法使用起来太过繁琐,而且 api 使用起来非常的复杂,还得操心资源回收。
152 0
陪玩平台源码具有哪些优点,开发怎样实现
陪玩平台源码不仅实现陪玩下单、多人聊天等功能,还实现了用户直播、礼物打赏、快速匹配等功能,丰富系统功能,满足用户更多需求。
74 0
代码写的垃圾被嫌弃?这 3 个插件你值得拥有…
今天推荐三个插件,它们都是代码质量检测的神器。可以扫描检测出你项目中不符合规范的代码,他们分别是 SonarLint、SonarQube、Alibaba代码规约插件。
72 0
微软开源最强Python自动化神器Playwright!不用写一行代码!自动生成代码还竟然如此流畅!妈妈再也不用担心我不会写代码了!
微软开源最强Python自动化神器Playwright!不用写一行代码!自动生成代码还竟然如此流畅!妈妈再也不用担心我不会写代码了!
635 0
不要再重复造轮子了,Hutool这款开源工具类库贼好使
不要再重复造轮子了,Hutool这款开源工具类库贼好使
141 0
+关注
沉默王二
微信搜索「沉默王二」,回复关键字「00」获取硬核计算机基础资料。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
前端自动化测试
立即下载
阿里开发者手册-单元测试专题
立即下载
ReactNative实战优化之路
立即下载