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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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…

研究揭示大脑在工作记忆中存储信息的神经机制

来源:中国科学院脑科学与智能技术卓越创新中心(神经科学研究所)3月5日,《神经元》期刊在线发表了题为《无颗粒岛叶皮层瞬时性神经元活动调控学习新任务时的工作记忆存储》的研究论文。该研究由中国科学院脑科学与智能技术卓越创新…

[Jmeter] 基本使用的总结

转载于:https://www.cnblogs.com/mytianying/p/6793461.html

java 仿qq登录界面7.1_安卓开发学习笔记(七):仿写腾讯QQ登录注册界面

这段代码的关键主要是在我们的相对布局以及线性布局上面,我们首先在总体布局里设置为线性布局,然后再在里面设置为相对布局,这是一个十分常见的XML布局模式。废话不多说,直接上代码:一.activity.xml>android:layout…

【前沿科技】云计算军事运用有啥特点

来源: 军语开源情报研究所云计算技术被视为继大型计算机、个人计算机、互联网之后的第四次信息技术产业革命。云计算是一种围绕分布式共享计算资源的创新应用模式,资源提供者可以方便而快速地提供计算资源,而无处不在的资源需求者可以便利地使…

js原型和原型链_JS 构造函数与原型链

JavaScript 对象体系是基于构造函数和原型链的。继承不通过类,而是通过原型对象实现,原型对象的所有属性和方法,都能被实例对象共享。构造函数(constructor)在 JS 中想要生成可重用、可继承的对象就要使用构造函数&…

全球制造业的未来

来源:航空简报2020年3月4日,Brahima Coulibaly和Karim Foda在美国布鲁金斯学会官网刊文,分析了全球制造业的未来,提出了几个鲜明的观点:1.“比较优势”将发生转移,中等收入国家尤其是许多亚洲新兴经济体&am…

mybatis 批量修改_解放双手,不写SQL!一个开源 MyBatis 神器!!

什么是通用 Mapper?它是一个可以方便的使用 Mybatis 进行单表的增删改查优秀开源产品。它使用拦截器来实现具体的执行 Sql,完全使用原生的 Mybatis 进行操作。在 Github 上标星 9.6K!为什么要用 Mapper?它提供了所有单表的基本增删…

论文速读:AI能从人类的愚蠢中学到什么?

来源:混沌巡洋舰本文来自对下面论文的编译和解读:导读:随着机器在某些认知问题上超越人类,人机协作将会带来越来越显著的影响。造成人类偏见的三个主要原因(小而不完整的数据集,从自己的决策结果中学习&…

struts2的核心和工作原理

在学习struts2之前,首先我们要明确使用struts2的目的是什么?它能给我们带来什么样的优点? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的优点就不在提了。技术优势 Struts2有双方面的技术优势,一…

mysql允许root远程连接_西部数码使用指南:远程桌面之终端服务器超出了最大允许连接数解决...

版权归西部数码所有,原文链接:https://www.west.cn/faq/list.asp?unid739出现这种情况的原因和解决办法。 原因:用远程桌面链接登录到终端服务器时经常会遇到“终端服务器超出最大允许链接数”诸如此类错误导致无法正常登录终端服务器,引起该…