java可视化压缩_25个小众的Java库

fa277f3feaf119f6adfcf059b0fd150b.png

25年前,James Gosling创建了Java,并永远地改变了编程语言的版图。与许多其他编程语言不同,Java在整个生命周期中都受到业界的高度欢迎和需求。

Java具有非常优秀的Core库,提供了许多基本功能。 基于其高度流行性,因此也存在许多成熟而强大的Java库。 作为务实的软件开发人员,在业务开发过程中, 为了解决常见或重复出现的问题,应该尽量使用成熟的库,而不是重新发明轮子。

在这篇文章中,我想介绍另外25个Java库来庆祝Java的25周年纪念。这些库基本都是成熟而且久经考验的,可以为Java软件开发中可能遇到的常见问题提供可靠的解决方案。

RxJava

Reactive Extensions(ReactiveX)是一种流行的软件开发范例,用于处理异步和事件驱动的编程。 RxJava是使用Observables的Reactive Extensions的Java VM实现。RxJava以声明方式在事件/数据序列上添加可组合运算符,从而扩展了观察者模式以支持事件驱动的编程。 此外,它还隐藏了诸如多线程、线程安全,同步和并发数据结构之类的底层复杂性。

如果你想在Java中进行响应式编程,那么这是一个必不可少的库。

Link:

ReactiveX/RxJavaRxJava

OkHttp

到目前为止,HTTP是最常用的应用层协议。因此有许多优秀的基于java的HTTP客户端库,而OkHttp算得上是其中最简单但功能强大的一个HTTP库。它提供了流畅,干净的API,可用于在Java中开发HTTP客户端。

它还支持一些高级特性:连接池、GZIP压缩、响应缓存、现代TLS特性等等。

Link:

square/okhttpSee

MyBatis

在多数软件系统中,都需要对数据进行存储。而在众多数据存储方案中,SQL仍是最常用的存储类型。作为Java开发人员,需要将Java对象与SQL表匹配。有一种实现此映射的方法是使用ORM(如Hibernate),但是在很多场景中——比如性能场景,开发人员希望完全控制对象-表映射。在这种情况下,你可以直接使用JDBC并编写SQL查询。另一种方式就是MyBatis将Java对象映射到存储过程或SQL语句,其中提供了基于注释的映射和基于XML描述符的映射。

相比原生的JDBC,大部分开发人员更喜欢MyBatis,尤其是在大规模项目中,因为它可以分离关注点,开发人员可以投入更多精力进行业务逻辑的开发。

Link:

mybatis/mybatis-3

HikariCP

HikariCP也是与数据库相关的库。建立JDBC连接是非常消耗资源的操作,如果每次访问数据库时都创建一个新连接,使用结束之后将其关闭,这会严重影响应用程序的性能;更不用说未正确关闭的或者不限制数量的数据库连接都可能会使你的应用崩溃。

使用连接池意味着每次请求连接时将重用连接,而不是创建新连接。HikariCP是JVM中一个非常快但轻量级的数据库连接池,它也是一个非常可靠的“零开销” JDBC连接池。

Link:

brettwooldridge/HikariCP

Lombok

Java经常被批评为是冗长和臃肿的编程语言。与其他流行编程语言(JavaScript、Python、Scala、Kotlin等)相比,开发人员使用Java开发时,需要编写大量的样板代码。尽管Java在JDK 15中引入了Records来减少Java中的样板代码,但JDK 15不是LTS版本。 幸运的是,有一个库可以大大减少Java中的样板代码: Lombok。通过使用Lombok库,你可以通过添加一些注释来生成getter、setter、hashcode、equals、toString、Builder类。此外,它还提供了空指针检查、日志记录等更多功能。

Link:

rzwitserloot/lombok

VAVR

在JDK 8中,Java终于Lambda和Streaming发布了人们期待已久的函数式编程。如果你之前已经习惯了函数式编程,或者希望深入研究函数式编程,你可能会发现Java中的函数式编程功能很匮乏。与其它的函数式编程语言(Haskell、Scala)相比,Java的函数式编程功能显得很苍白。VAVR库则可以填补Java中函数式编程特性的空白,其中提供了持久的集合、用于错误处理的函数式抽象、并发编程、模式匹配等。

Link:

Vavr

Gson

多年来,JSON已成为事实上的数据交换格式。 在Java中,也有一些处理JSON的优秀库,包括非常有名的Jackson和FastJson。还有一个出色的库就是Google的Gson, 与Jackson不同,这是一个很简约的库,仅支持JSON。 它提供数据绑定、广泛的通用支持、灵活的自定义。 Gson的主要优点(或者说缺点,取决于你自己的喜好)之一是不需要注解。

Link:

google/gson

jsoup

如果你在使用Java开发应用程序并且需要处理HTML,那你可以使用jsoup。这是一个用于处理实际HTML的Java库。 它为获取URL以及提取和处理数据提供了非常方便的API。 它实现了WHATWG HTML5规范,并使用最佳的HTML5 DOM方法解析HTML。 它支持从URL 或字符串解析HTML、查找和提取数据、操纵HTML元素、清理HTML、输出HTML等。

Link:

jhy/jsoupjsoup

JIB

如果你在开发企业级应用程序,那么它至少应该支持云部署。服务上云准备工作的第一步就是,将应用程序容器化,也就是将你的artifactory二进制文件放入Docker镜像中。对Java程序进行容器化的工作有点繁琐:你需要对Docker有深入的了解,需要创建Dockerfile,还需要Docker Daemon。幸运的是,对于Java开发人员而言,Google使用现有工具创建了一个开源的Java容器化程序。 您可以将JIB用作Java库来构建优化的Docker和OCI镜像。

Link:

GoogleContainerTools/jib

Tink

Tink是出自Google的另一个方便的Java库。密码学和安全性在软件开发中变得越来越重要。加密技术用于保护用户数据。正确实施加密需要大量的专业知识和精力。 Google的一组密码学家和安全工程师编写了多语言密码库Tink。 它提供了易于使用但不易误用的安全API。Tink通过不同的原语提供加密功能。 它提供对称密钥加密,流对称密钥加密,确定性对称密钥加密,数字签名,混合加密以及许多其他加密功能。

Link:

google/tink

Webmagic

如果您从事Web信息提取,您可以编写自己的爬虫程序,这既费时又乏味。在Java中,Webmagic是一个优秀的Web爬虫库,涵盖了爬虫的整个生命周期:下载、URL管理、内容提取和持久性。它提供了一个简单而灵活的核心、注释支持、多线程和易于使用的API。

Link:

code4craft/webmagic

ANTLR 4

如果您的工作是解析和处理数据,那么ANTLR库会非常方便。它是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它通过使我们能够访问语言处理原语(例如词法分析器、语法、解析器和运行时)来对其进行处理,从而实现对数据的处理。

它通常用于构建工具和框架。

Link:

antlr/antlr4

Caffeine

如果您的应用程序中存在大量读操作,则缓存可以大大提高您的应用程序的数据访问性能。 Java有许多很棒的缓存库,Caffeine是其中最好的。 它是一个基于Java的高性能、近乎最佳的缓存库。它提供了一个流畅的缓存API和一些高级特性,如异步加载项、异步刷新、弱引用键等。

Link:

ben-manes/caffeine

Metrics

Java应用程序投入生产后,您将需要深入了解应用程序的关键组件。 Dropwizard框架中的Metrics是一个简单而引人注目的Java库,可提供对您的应用程序和JVM KPI的监控,例如,事件发生率、挂起的作业、服务运行状况检查等。 它是模块化的,并为其它库/框架提供监控模块。

Link:

dropwizard/metrics

gRPC-Java

谷歌在2015年创建了gRPC作为一个现代远程过程调用系统。此后,gRPC变得非常流行,并且是现代软件开发中使用最广泛的RPC系统之一。 gRPC-Java库是gRPC客户端的Java实现。 如果要在Java中使用gRPC,则该库会为您带来很多方便。

Link:

grpc/grpc-java

Java WebSocket

传统的客户端-服务器通信是单向的。WebSocket是通过单个TCP连接的双向通信协议。 Java WebSocket是Java完成的准系统级的WebSocket服务器和客户端实现。 如果您是Java开发人员,并且想使用WebSocket,那么强烈推荐您使用此库。

Link:

TooTallNate/Java-WebSocket

JJWT

JSON Web令牌(JWT)是现代软件开发中事实上的授权和安全信息交换格式。无论您使用的是简单的基于会话的授权还是高级的基于OAuth2的授权,都可能使用JWT。JJWT是一个简单的Java库,用于在Java和JVM环境中创建和验证JWT。其中所有已实现功能都完全符合对应的RFC规范,而且提供了可读性强且方便的流利API。

Link:

jwtk/jjwtJJWT

Swagger-Core

OpenAPI是机器可读接口文件的规范,用于描述、产生、使用和可视化RESTful Web服务。 Swagger-Core是OpenAPI规范的Java实现。 如果要在Java或JavaEE应用程序中公开发布REST API,则可以使用Swagger-Core自动提供并公开API定义。

Link:

swagger-api/swagger-core

Async Http Client

由于异步编程的非阻塞特性,它最近变得越来越流行。大多数流行的Java HTTP客户端库都受限于未提供对异步HTTP响应的处理。Async Http Client是一个流行的Java库,提供异步HTTP响应处理,此外,该库还支持WebSocket协议。

Link:

AsyncHttpClient/async-http-client

Liquibase

作为软件开发人员,我们都知道代码的版本控制、DevOps和CI/CD的重要性。在博客文章:Evolutionary Database Design中,Martin Fowler指出,我们需要对代码进行版本控制和CI/CD。Liquibase是一个工具,它支持对Java应用程序中的SQL数据库更改进行跟踪、版本控制和部署。如果你使用的是SQL数据库,并且数据结构正在不断调整,那么这个工具可以极大地简化数据库迁移过程。

Link:

Liquibase | Open Source Version Control for Your Database

Springfox

我已经在前面列出了Swagger-Core,它可以自动为原始Java或Java EE应用程序生成REST API文档。 在企业应用程序开发中,Spring MVC已超过Java EE,成为排名第一的应用程序开发平台。 在基于Spring的Java应用程序中,Springfox库可以从源代码自动生成REST API文档。

Link:

springfox/springfox

JavaCV

OpenCV是一个计算机视觉和机器学习软件库。它是开源的,旨在为计算机视觉应用程序提供一个通用的基础设施。JavaCV是对计算机视觉领域中OpenCV和许多其他流行库(FFmpeg、libdc 1394、PGR FlyCapture)的一个封装。JavaCV还具有硬件加速的全屏图像显示,用于在多核上并行执行代码的简便方法,用户友好的相机和投影仪的几何和颜色校准,特征点的检测和匹配以及许多其他功能特征。

Link:

bytedeco/javacv

Joda Time

在java8之前的核心库中,Java的日期和时间功能很糟糕。Java8在其java.time包中发布了急需的高级日期和时间功能。 如果您正在使用Java的旧版本(Java8之前的版本),则Joda time可以为您提供高级的日期和时间功能。 但是,如果您使用的是Java的较新版本,那就不需要此库。

Link:

JodaOrg/joda-time

Wiremock

HTTP是现代应用程序开发中最受欢迎的传输协议,而REST是基于微服务的应用程序开发中事实上的通信协议。在编写单元测试期间,最好专注于SUT(被测系统)并模拟SUT中使用的服务。Wiremock是REST API的模拟器,使开发人员可以针对不存在或不完整的API编写代码。 在基于微服务的软件开发中,Wiremock可以大大提高开发速度。

Link:

tomakehurst/wiremock

MapStruct

在Java应用程序开发中,通常需要将一种类型的POJO转换为另一种类型的POJO。 实现此POJO或Bean转换的一种方法是显式地编写转换逻辑,这会导致代码很繁琐。 还有一个明智的方法是使用专门开发的库来转换POJO / Bean。 MapStruct是一个代码生成器,它根据配置方法上的约定在POJO / Bean之间实现映射。 生成的映射代码直接使用简单的方法调用,因此是快速、类型安全且易于理解的。

Link:

mapstruct/mapstruct

总结

当然,对于像Java这样大型的软件生态系统,这个列表是根本无法完全涵盖的。有许多优秀的Java库我没有在这里列出,也都值得一试。但是,这个列表可以帮助您快速了解Java生态系统。

参考:

https://towardsdatascience.com/25-lesser-known-java-libraries-you-should-try-ff8abd354a94

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 线程变量put_Java线程(篇外篇):线程本地变量ThreadLocal

首先说明ThreadLocal存放的值是线程内共享的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递,这样处理后,能够优雅的解决一些实际问题,比如hibernate中的OpenSessionInView,就是使…

深度解读:人体防御病毒的免疫力究竟是什么?

来源:国际仿生工程学会“免疫力作为机体免除瘟疫的一种能力,已被广大民众广泛使用,特别是本次新型冠状病毒的暴发,更是使得免疫力在新闻媒体中广泛传播。对于这样一个极其抽象模糊的术语,我们需要理解其真实的含义是什…

洛谷 1087——FBI树

题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“…

python开发web使用什么工具_常用的Python web开发工具盘点

www.oldboyedu.com老男孩IT教育,只培养技术精英常用的Python web开发工具盘点Python是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准库也是值得…

java的add方法的使用_Java HashSet add()方法与示例

HashSet类add()方法add()方法在java.util包中可用。当尚不存在给定元素时,使用add()方法将其插入此HashSet中,否则它将忽略它并返回false。add()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法&#xff0…

国自然:信息科学部优先发展领域及主要研究方向(含跨科学部)

来源:科奖多媒体中心“十三五”期间,通过支持我国优势学科和交叉学科的重要前沿方向,以及从国家重大需求中凝练可望取得重大原始创新的研究方向,进一步提升我国主要学科的国际地位,提高科学技术满足国家重大需求的能力…

缓冲区不能为空。 参数名: buffer_Java Nio 之Buffer

了解历史在 java1.4之前java io ,最核心的点是在"流"上;java io 的两大基石InputStream和OutputStream 也就是大家耳熟能祥的输入流和输出流,通过这个两个基石可以实现从外界读取数据到内存,以及将内存中数据写到外界;但是输入流和…

怎样把java项目转换成web项目_Eclipse中将Java项目转换成Web项目的方法

注意:0.点击Further configuration available,修改eclipse默认的WebContent 并修改为WebRoot,勾选Generate web.xml deployment descriptor1.需要把web 工程的版本改成2.5本地项目:struts2-3其中的无需修改的文件:org.…

新增方法

//新增方法addRecord : function() {var me this;var height 500; //取得当前屏幕高度var width 500; //取得当前屏幕宽度var content Ext.create("BeidaSoft.SFJCGL.rcjwgl.bdgl.BdglAddPanel", {}); var win new Ext.Window({layout:fit,width:wi…

机器人行业疫情之下的“危”与“机”

来源:腾讯网口罩脱销令口罩生产线炙手可热,医护人士紧缺令送药机器人走俏,站场监控让自动测体温机器人成为网红,武汉街头配送出现物流机器人身影……新型冠状病毒感染肺炎疫情,给机器人和智能制造行业带来了意想不到的…

线性查找python_Python实现搜索算法的实例代码

将数据存储在不同的数据结构中时,搜索是非常基本的必需条件。最简单的方法是遍历数据结构中的每个元素,并将其与您正在搜索的值进行匹配。这就是所谓的线性搜索。它效率低下,很少使用,但为它创建一个程序给出了我们如何实现一些高…

mysql 二进制日志变化_MySQL运维之二进制日志

MySQL二进制日志里保存会造成或可能造成数据变化的SQL语句。通过二进制日志可以完成如实时异地容灾备份、读写分离、数据恢复等功能。下面,我们一起来看看Mysql二进制日志。开启bin-log日志Mysql默认是没有开启bin-log日志的,需要我们自己去添加配置。lo…

Python 模块(二)

1 logging 模块 logging有两种的配置的方式,configure、logger 1.1 config方式 import logging日志的配置:config模式 只能选择在屏幕或者在文件输出logging.basicConfig(levellogging.DEBUG,format%(asctime)s [%(lineno)s] %(message)s ,filenamelog.t…

影响和改变世界的50件发明专利,猜下中国有几个?

来源:国家知识产权局创新创造未来,专利改变世界。最近几十年究竟有哪些专利真正改变了世界呢?国家识产权局选取了一批具有历史意义的、促进社会经济发展的、对人类社会产生重要影响的中外专利。未来智能实验室的主要工作包括:建立…

js 自动分配金额_JS内存图以及原型与原型链

内存以及内存图在JS中,每一个数据都需要一个内存空间。内存空间又被分为两种,栈内存(stock)与堆内存(heap)。JS内存空间分为栈(stack)、堆(heap)、池(一般也会归类为栈中)。 其中栈存放变量,堆存放复杂对象,池存放常量。JS中的基础…

全球首个AI宇宙模拟器不仅有6亿光年宽度,还“自行”跑出了暗物质

来源:大数据文摘《创世纪》里,神用7天创造了这个世界。而现在,你可能也有机会体验这个过程,创造一个属于自己的宇宙。Space Engine 0.990版本在Steam平台发售不到一天,近300测评全部为最高评价。之后,还得到…

一个HelloWorld网站

一个HelloWorld网站 点击直达 介绍 很多技术在里面都有很多的HelloWorld 当初是我在windows下使用redis在官方文档没有找到入门的资料发现的 个人理解 作为HelloWorld是不错的,当然还有一些东西值得看,参考用过直接上某个技术的官方文档。 转载于:https://www.cnblogs.com/bean…

js 延迟几秒执行_深入研究 Node.js 的回调队列

// 每日前端夜话 第365篇// 正文共:3000 字// 预计阅读时间:10 分钟队列是 Node.js 中用于有效处理异步操作的一项重要技术。在本文中,我们将深入研究 Node.js 中的队列:它们是什么,它们如何工作(通过事件循环)以及它们…

java官方 jax rs_jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档

原文:https://docs.jboss.org/author/display/AS7/JavaAPIforRESTfulWebServices(JAX-RS)ContentTutorial OverviewThis chapter describes the Java API for RESTful web services (JAX-RS, defined in JSR331). RESTEasy is an portable implementation of this s…

数据结构-王道2017-第5章 图

1.图的基本概念 1)图的定义 图G由顶点集V和边集E组成,记为G(V,E),其中V(G)表示图G中定点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。V{v1,v2,..,vn},用|V|表示图G中顶点的个数,也称为图G的阶&…