避免重复造轮子,Java 程序员必备

article/2025/9/30 18:53:38

优秀且经验丰富的 Java 开发人员的特点之一是对 API 的广泛了解,包括 JDK 和第三方库。如何使用现有的 API 进行开发,而不是为常见的东西编写新的代码。是提升开发效率必选之路。

一般来说,我会为日常项目提供有用的库,包括 Log4j 等日志库、Jackson 等 JSON 解析库以及 JUnit 和 Mockito 等单元测试 API。如果您需要在项目中使用它们,则可以在项目的类路径中包含这些库的 JAR 以开始使用它们,也可以使用Maven进行依赖管理。

对 Java 程序员有用的开源库

下面是收集的一些有用的第三方库,Java 开发人员可以在他们的应用程序中使用它们来完成很多有用的任务。为了使用这些库,Java 开发人员应该熟悉这一点,这就是本文的重点。如果您有一个想法,那么您可以研究该库并使用它。

1. 日志库

日志库非常常见,因为您在每个项目中都需要它们。它们对于服务器端应用程序来说是最重要的,因为日志只放置在您可以看到应用程序正在发生什么的地方。尽管 JDK 附带了自己的日志库,但仍有更好的替代方案可用,例如 Log4j、SLF4j 和 LogBack。

Java 开发人员应该熟悉日志库的优缺点,并知道为什么使用 SLF4j 比普通的 Log4j 更好。

2. JSON解析库

在当今的 Web 服务和物联网世界中,JSON 已成为将信息从客户端传输到服务器的首选协议。它们已取代 XML,成为以独立于平台的方式传输信息的首选方式。

不幸的是,JDK 没有JSON 库。但是,有许多优秀的第三方库可以让您解析和创建 JSON 消息,例如 Jackson 和 Gson。

Java Web 开发人员应该至少熟悉这些库中的一个。

3. 单元测试库

单元测试是将普通开发人员与优秀开发人员区分开来的最重要的事情。程序员经常得到不编写单元测试的借口,但避免单元测试的最常见借口是缺乏流行单元测试库的经验和知识,包括 JUnit、Mockito 和 PowerMock。

4. 通用库

Java 开发人员可以使用一些优秀的通用第三方库,例如 Apache Commons 和 Google Guava。我总是在我的项目中包含这些库,因为它们简化了很多任务。

重新发明轮子是没有意义的。我们应该更喜欢使用久经考验的库,而不是时不时地编写我们自己的例程。

Java 开发人员最好熟悉 Google Guava 和 Apache Commons 库。

5. HTTP 库

我不喜欢 JDK 的一件事是它们缺乏对 HTTP 的支持。虽然您可以使用包中的类建立 HTTP 连接 java.net,但使用开源第三方库(如 Apache HttpClient 和 HttpCore)并不容易或无缝。

尽管 JDK 9 带来了对 HTTP 2.0 的支持以及对 HTTP 的更好支持,但我强烈建议所有 Java 开发人员熟悉流行的 HTTP 客户端库,包括 HttpClient 和 HttpCore。

6. XML 解析库

有许多 XML 解析库,包括 Xerces、JAXB、JAXP、Dom4j 和 Xstream。Xerces2 是 Apache Xerces 系列中的下一代高性能、完全兼容的 XML 解析器。这个新版本的 Xerces 引入了 Xerces Native Interface (XNI),这是一个用于构建解析器组件和配置的完整框架,它非常模块化且易于编程。

Apache Xerces2 解析器是 XNI 的参考实现,但其他解析器组件、配置和解析器可以使用 Xerces Native Interface 编写。Dom4j 是另一个用于 Java 应用程序的灵活 XML 框架。

7. Excel 阅读库

信不信由你——所有现实世界的应用程序都必须以某种形式与 Microsoft Office 交互。许多应用程序需要提供在 Excel 中导出数据的功能,如果您必须从 Java 应用程序中执行相同操作,则需要 Apache POI API。

这是一个非常丰富的库,允许您 从 Java 程序读取和写入 XLS 文件。您可以查看该链接以获取在核心 Java 应用程序中读取 Excel 文件的工作示例。

8. 字节码库

如果您正在编写生成代码或与字节码交互的框架或库,那么您需要一个字节码库。

它们允许您读取和修改应用程序生成的字节码。Java 世界中一些流行的字节码库是 javassist 和 Cglib Nodep。

Javassist(JAVA 编程助手)使 Java 字节码操作变得非常简单。它是一个用于在 Java 中编辑字节码的类库。ASM 是另一个有用的字节码编辑库。

9. 数据库连接池库

如果您从 Java 应用程序与数据库进行交互,但不使用数据库连接池库,那么,您会丢失一些东西。

由于在运行时创建数据库连接需要时间并且使请求处理速度变慢,因此始终建议使用数据库连接库。一些流行的是 Commons Pool 和 DBCP。

在 Web 应用程序中,它的 Web 服务器通常提供这些功能,但在核心 Java 应用程序中,您需要将这些连接池库包含到您的类路径中才能使用数据库连接池。

10. 消息库

与日志记录和数据库连接类似,消息传递也是许多实际 Java 应用程序的共同特征。

Java 提供 JMS 或 Java 消息传递服务,它不是 JDK 的一部分。对于此组件,您需要包含一个单独的 jms.jar

同样,如果您使用第三方消息传递协议,例如 Tibco RV,那么您需要 tibrv.jar 在应用程序类路径中使用第三方 JAR 。

11. PDF 库

与 Microsoft Excel 类似,PDF 库是另一种普遍存在的格式。如果您需要在应用程序中支持 PDF 功能,例如 在 PDF 文件中导出数据,您可以使用 iText 和 Apache FOP 库。

两者都提供有用的 PDF 相关功能,但 iText 更丰富更好。

12. 日期和时间库

在 Java 8 之前,JDK 的数据和时间库有很多缺陷,因为它们不是线程安全的、不可变的和容易出错的。许多 Java 开发人员依靠 JodaTime 来实现他们的日期和时间要求。

从 JDK 8 开始,没有理由使用 Joda,因为您可以在 JDK 8 的新日期和时间 API中获得所有这些功能,但是如果您使用的是较旧的 Java 版本,那么 JodaTime 是一个值得学习的库。

13. 集合库

尽管 JDK 拥有丰富的集合库,但也有一些第三方库提供了更多选项,例如 Apache Commons 集合、Goldman Sachs 集合、Google 集合和 Trove。

Trove 库特别有用,因为它为 Java 提供了高速的常规和原始集合。

FastUtil 是另一个类似的 API。它通过提供特定类型的映射、集合、列表和优先级队列来扩展 Java 集合框架,这些映射、集合、列表和优先级队列具有较小的内存占用、快速访问和插入;它还提供大(64 位)数组、集合和列表,以及用于二进制和文本文件的快速、实用的 I/O 类。

14. 电子邮件 API

javax.mail 和 Apache Commons Email 都提供了用于从 Java 发送电子邮件的 API 。它建立在 JavaMail API 之上,旨在简化它。

15. HTML 解析库

与JSON和XML类似,HMTL 是我们许多人必须处理的另一种常见格式。值得庆幸的是,我们有 JSoup,它极大地简化了在 Java 应用程序中使用 HTML。

您可以使用JSoup不仅解析 HTML,还可以创建 HTML 文档

它提供了一个非常方便的 API 用于提取和操作数据,使用最好的DOM、CSS 和类似 jquery 的方法。JSoup 实现了 WHATWG HTML5 规范并将HTML解析为与现代浏览器相同的 DOM。

16.密码库

Apache Commons Codec 包包含各种格式的简单编码器和解码器,例如Base64和 Hexadecimal。

除了这些广泛使用的编码器和解码器之外,编解码器包还维护了一组语音编码实用程序。

17. 嵌入式 SQL 数据库库

我真的很喜欢像 H2 这样的内存数据库,你可以将它嵌入到你的 Java 应用程序中。它们非常适合测试您的 SQL 脚本和运行需要数据库的单元测试。但是,H2 不是唯一的 DB,您还可以选择 Apache Derby 和 HSQL。

18. JDBC 故障排除库

有一些很好的 JDBC 扩展库可以让调试更容易,比如 P6spy。

这是一个库,可以无缝拦截和记录数据库数据,而无需更改应用程序的代码。您可以使用它们来记录 SQL 查询及其时间。

例如,如果您在代码中使用PreparedStatment和CallableStatement,这些库可以记录带有参数的准确调用以及执行所需的时间。

19. 序列化库

Google 协议缓冲区是一种以高效且可扩展的格式对结构化数据进行编码的方法。它是Java 序列化的更丰富和更好的替代方案。我强烈建议有经验的 Java 开发人员学习 Google Protobuf。

20. 网络库

一些有用的网络库是 Netty 和 Apache MINA。如果您正在编写需要执行低级网络任务的应用程序,请考虑使用这些库。

以上就是今天小编分享给大家的一些工作中常用的库,了解并熟练的运用他们,不仅可以大大提高你的开发效率,也可以学习优秀代码的设计,提高自己的编码能力。

PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦


http://chatgpt.dhexx.cn/article/uJMSHKAT.shtml

相关文章

我们为什么要造轮子

程序员都喜欢造轮子,我身边的程序员,无论他们用什么语言,java、android、ios、python、go, 甚至是js,都热衷于造轮子。其实用go程序员造轮子我倒是能理解,毕竟很多java转go的朋友经常 吐槽:怎么这个没有&am…

程序员为什么热衷造轮子

搜索一下“造轮子”或者“程序员为什么喜欢造轮子”,会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年。不过还是有再谈的必要。 “造轮子”的含义: 明知道你做的不可能比前辈做得更好&#xff0c…

「轮子」是什么东西?创造它有什么意义?

程序员圈经常流行的一句话:“不要重复造轮子”。在计算机领域,我们将封装好的组件、库,叫做轮子。因为它可以拿来直接用,直接塞进我们的项目中,就能实现对应的功能。 有些同学会问,人家都已经做好了&#x…

Java获取当前日期的前后一天/一周/一月/一年

Date today new Date(); //当前时间 Calendar calendar Calendar.getInstance(); //得到日历 calendar.setTime(today);//把当前时间赋给日历 calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天 Date yesterday calendar.getTime(); //得到前一天的时间 calend…

java获取当前的年月日日期

import java.util.Calendar; import java.util.Date;public class Main {public static void main(String[] args) {Calendar cal Calendar.getInstance();Date datenew Date();//现在的日期cal.setTime(date);Integer yearcal.get(Calendar.YEAR);//获取年Integer month cal…

java获取当前日期(JAVA获取当前日期的前三天工作日)

在java里怎么取离当前日期最近的一个星期天??知道getNow import java。util。Calendar; import java。util。Date; public class Test { public static void main(String args[]){ //获得当前日期 Date date new Date(); Calendar cal tInstance…

Java 获取当前日期并且实现日期的格式化

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。 今天做一个需求是 实现当前事件减去100天并且格式化为下图所示 实现代码如下: String time "";if(S…

Java获取当前日期的前一天

Java获取当前日期的前一天 //获取当前日期Date date new Date();//格式转换SimpleDateFormat f new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar calendar Calendar.getInstance();//设置当前时间calendar.setTime(date);//在当前时间基础上减一年calendar…

Java获取当前时间的方法

1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取,此方法优势是不受时区的影响,但是得到结果是时间戳的格式,如: 1543105352845 可以通过代码将时间戳转化为我们可以理解的格式&…

Java获取当前日期和时间

文章目录 1、 System.currentTimeMillis()2、 Java.util.Date3、 Calendar API4、 Date/Time API4.1 LocalDate4.2 LocalTime4.3 LocalDateTime4.4 ZonedDateTime 5、 总结 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取&#…

Java如何获取当前日期和时间?

本文将为您介绍 Java 中关于日期和时间获取的方法,以及介绍 Java 8 中获取日期和时间的全新API。 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取,此方法优势是不受时区的影响,但是得到结果是…

孪生网络 Siamese Network

文章目录 孪生网络的发展孪生网络定义功能与用途损失函数 孪生网络的发展 孪生网络又称为连体网络,网络中的连体是通过共享权值来实现。孪生网络最早是出现在1993年的论文《Signature Verification using a ‘Siamese’ Time Delay Neural Network》用于美国支票上…

论文笔记:孪生神经网络(Siamese Network)

Siamese Network 原文:《Learning a Similarity Metric Discriminatively, with Application to Face Verification》 1、四个问题 要解决什么问题? 用于解决类别很多(或者说不确定),然而训练样本的类别数较少的分类…

SiameseFC超详解

SiameseFC 前言论文来源参考文章 论文原理解读首先要知道什么是SOT?(Siamese要做什么)SiameseFC要解决什么问题?SiameseFC用了什么方法解决?SiameseFC网络效果如何?SiameseFC基本框架结构SiameseFC网络结构…

Siamese网络代码详解 训练自定义数据集 模型推理

开门见山,Siamese网络结构如下所示: 主干网络:VGG16。整个VGG16的网络结构比较简单,如下图所示,主要分为5个部分: stage1为 2次33卷积+1次22最大池化,输出特征为64通道;stage2为 2次33卷积+1次22最大池化,输出特征为128通道;stage1为 3次33卷积+1次22最大池化,输出…

深度学习(自监督:SimSiam)——Exploring Simple Siamese Representation Learning

文章目录 前言SimSiam简述实验 前言 该文章是何凯明组发表于CVPR2021上的文章,目前已获得最佳论文提名,主要解决自监督对比学习中的奔溃解问题。奔溃解即不论什么输入,特征提取器输出的特征向量都相同。 本文将简单介绍SimSiam,…

siamese模型码详解(每一句代码都有解释!!!)

最近在研究Siamese模型来进行文本相似度的计算,今天就做一期代码详解,每一行的代码都会做出相应的解释,对于初学LSTM的人来说读懂代码是非常有必要的,Siamese模型就是将两个句子(训练数据)通过embeding层&a…

孪生神经网络(Siamese Network)详解

1. 要解决什么问题? 主要解决以下两类分类问题: 第一类,分类数量较少,每一类的数据量较多,比如ImageNet、VOC等。这种分类问题可以使用神经网络或者SVM解决,只要事先知道了所有的类。第二类,分…

Siamese Network (原理篇)

1. Siamese Network 用途 Siamese网络是一种相似性度量方法,当类别数多,但每个类别的样本数量少的情况下可用于类别的识别、分类等。传统的用于区分的分类方法是需要确切的知道每个样本属于哪个类,需要针对每个样本有确切的标签。而且相对来说…

siamese(孪生) 网络

siamese 网络, 是05年Yann Lecun提出来的。它的特点是它接收两个图片作为输入,而不是一张图片作为输入。 文献资料: 摘抄自caffe github的issue697 Siamese nets are supervised models for metric learning [1]. 译:孪生网络…