查看原文
其他

5个Java开发者不可不知的编程库

学研妹 Java学研大本营 2024-01-02

本文介绍5个优秀的Java开源类库,帮助您提高开发效率和性能。

长按关注《Java学研大本营》

有经验的Java开发者有个特点是善于利用现有的轮子来构建汽车,而不是反复造轮子。如今的Java生态系统已经非常成熟。

在Java快速发展的几十年中,涌现出许多优秀的开源项目。在大多数情况下,我们可以在开源社区中找到合适的开源库。

许多开发者已经使用和测试了这些库,通常它们具有良好的性能和稳定性。合理地使用这些优秀的开源组件可以节省大量时间,让你有更多的时间去做其他事情。在本文中,将分享一些Java开发者应该熟悉的开源类库。

1 Orika

Orika是一个Java bean映射工具,可以递归地将数据从一个对象复制到另一个对象。在编写代码时,我们通常会发现需要将对象转换为不同的格式以适应不同的API,例如将DTO转换为POJO或POJO转换为VO。通常,我们需要通过getter/setter完成此操作。Orika可以通过简单的代码为您解决这个烦恼,而且性能损失不大。

Maven依赖项:

<dependency>
    <groupId>ma.glasnost.orika</groupId>
    <artifactId>orika-core</artifactId>
    <version>1.4.6</version>
</dependency>

示例代码:

public class UserVo {
    private String username;

    private String phone;

//省略getter/setter
}

public class User {
    private String username;

    private String phone;

//省略getter/setter
}

public class OrikaTest {

    public static void main(String[] args) {
        User user = new User();
        user.setPhone("xxxxxx");
        user.setUsername("name");

        MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
        UserVo userVo = mapperFactory.getMapperFacade().map(user, UserVo.class);
        System.out.println("the copy object: "+userVo);
    }
}

Orika不仅可以复制简单的Java对象,还可以复制集合。是不是很棒?

2 Caffeine

Caffeine是一个高性能的内存缓存类库。Caffeine使用W-TinyLFU算法,其读写性能比guava更优秀。Spring 5已经将缓存的默认实现从guava改为了Caffeine。

Maven依赖项:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.9.0</version>
</dependency>

示例代码:

Cache<String, String> cache = Caffeine.newBuilder()
                .maximumSize(10000)
                .expireAfterAccess(60, TimeUnit.SECONDS)
                //如果缓存为空,运行以下表达式并将其存储在缓存中
                .build(key-> key+"test");

        String key2="test2";
        cache.put("test""cache");
        //获取缓存值,如果为空,则返回null
        log.info("key present: [{}] -> [{}]", k, cache.getIfPresent(k));
        log.info("key present: [{}] -> [{}]", key2, cache.getIfPresent(key2));
        //移除缓存
        cache.invalidate(k);

3 Kryo

Kryo是一个快速高效的Java对象序列化框架,具有高性能、序列化流小和简单API等特点。目前,许多开源项目都在使用Kryo,例如Apache Hive和Apache Spark。以下是Kryo和主要序列化框架的性能比较。

Maven依赖项:

<dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>5.2.0</version>
</dependency>

示例代码:

public class KryoSerializer {

    private KryoFactory factory =()->{
        Kryo kryo = new Kryo();
        kryo.setDefaultSerializer(CompatibleFieldSerializer.class);
        kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
        return kryo;
    };

    private KryoPool pool = new KryoPool.Builder(factory).softReferences().build();


    public byte[] serialize(Object object) {
        return pool.run(kryo -> {
            try(Output output = new Output(2048,-1)) {
                kryo.writeClassAndObject(output,object);
                output.flush();
                return output.toBytes();
            }
        });
    }


    public <T> T deserialize(byte[] data) {
        try(Input input = new Input(data)) {
            return pool.run(kryo -> ((T) kryo.readClassAndObject(input)));
        }
    }
}

4 Netty

Netty是一个异步事件驱动的网络应用程序框架,可用于快速开发和维护高性能协议服务器和客户端。

在网络编程领域,Netty绝对是占据主导地位的。基于Java NIO,Netty使用反应器线程模型,将客户端连接绑定到特定线程,以避免IO线程频繁上下文切换。

Netty中的所有IO操作都是异步的,并具有超高的性能。许多开源的Java项目都将Netty作为默认的通信层框架,例如下面要提到的Zookeeper、Elasticsearch和Redisson。

5 Redisson

Redisson采用基于NIO的Netty框架,不仅可以作为Redis的底层驱动客户端,还可以以同步、异步、异步流或管道形式发送Redis命令、执行和处理Lua脚本以及处理返回结果。

在此基础上,它还集成了更先进的应用解决方案,不仅将原生的Redis哈希、列表、集合、字符串和地理数据结构封装为Java中最熟悉的数据结构,还实现了分布式锁等高级应用场景。

Maven依赖项:

<groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.16.2</version>
</dependency>

示例代码:

//获取和设置键值对
RBucket<String> nameRBucket =  redisson.getBucket("username");
nameRBucket.set("lance"60, TimeUnit.SECONDS);
redisson.getBucket("username").get();

//操作哈希表
RMap<String, String> userMap = redisson.getMap("user");
userMap.put("id""1");
userMap.put("name""lance");
userMap.put("age""30");

userMap.expire(60, TimeUnit.SECONDS);
redisson.getMap("user").get("name");

//操作列表
RList<String> usernames = redisson.getList("usernames");
users.add("lance");

studentRList.expire(60, TimeUnit.SECONDS);
redisson.getList("usernames").get(0);

以上是推荐的五个优秀的开源Java库,上面的代码只是一个演示,如果您真的想在生产环境中使用它们,您需要根据您的项目情况进行打包。希望在阅读本文后,您可以应用到您的项目中。

推荐书单

《Java语言程序设计(第3版)》

“十二五”普通高等教育本科国家级规划教材,畅销Java程序设计教材,已经被几百所高校选为教材。

本书第1版于2005年出版。第2版于2010年出版,是普通高等教育“十一五”国家级规划教材。第3版入选“十二五”高等教育本科国家级规划教材。 本书在介绍Java语言的同时,更注重Java语言的知识体系,系统性地分析了Java核心机制与基本原理。全书分为核心基础篇与应用技术篇。在核心基础篇中, 论述了面向对象程序设计的基本概念、Java语言基础(包括运算符与表达式、程序流控制、数组)、Java面向对象特性、异常处理方法、基于Swing的图形化用 户界面构造方法、输入/输出、Applet概念与应用。应用技术篇介绍了开发Java的高级应用技术,包括多线程、网络编程、JDBC数据库连接、J2EE技术、功能驱 动的Java程序开发方法以及Java编程规范。书中还提供了大量实例。 本书具有系统性、知识性、实用性等特点,可以作为大专院校教材,也可作为Java编程爱好者的参考书。

购买链接:https://item.jd.com/11949337.html

精彩回顾

深入理解Spring Boot架构

5个强大的IntelliJ IDEA插件,提高你的编程效率入门FPGA及其架构

FPGA vs ASIC,孰优孰劣?

精通Java后台任务开发,使用Spring简化异步任务处理

长按关注《Java学研大本营》
长按访问【IT今日热榜】,发现每日技术热点
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存