文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 12:47

关注

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

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

1 Orika

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

Maven依赖项:


    ma.glasnost.orika
    orika-core
    1.4.6

示例代码:

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依赖项:


    com.github.ben-manes.caffeine
    caffeine
    2.9.0

示例代码:

Cache 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依赖项:


    com.esotericsoftware
    kryo
    5.2.0

示例代码:

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 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依赖项:

org.redisson
    redisson
    3.16.2

示例代码:

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

//操作哈希表
RMap 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 usernames = redisson.getList("usernames");
users.add("lance");

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

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

来源:Java学研大本营内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯