![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java相关开发
咖啡Q伴侣
纸上得来终觉浅,绝知此事要躬行! 代码虐我千百遍,我视代码如初恋!
展开
-
阿里巴巴Java开发手册思维导图
趁着有时间把阿里巴巴Java开发手册又看了一遍了,很多时候发现自己好像一点都不记得里面的内容了。于是只能把大概内容用思维导图的形式画一遍,这样可以在脑子里形成一张图,方便记忆。其中有许多是比较基础的内容,希望对大家也有帮助。1总图2编程规约3异常日志4单元测试5安全规约6MySQL数据库7工程结构...转载 2018-04-24 11:03:47 · 924 阅读 · 0 评论 -
第五十三篇: JAVA简易WEB服务器(三)
在上一篇《JAVA简易WEB服务器(二)》中我们完成了对浏览器请求的解析,这一篇我们继续来实现响应浏览器的请求,同样的,我们还是先来看一下服务端响应给浏览器的数据格式HTTP/1.1 200 OKServer: Apache-Coyote/1.1Accept-Ranges: bytesETag: W/"129-1456125361109"Last-Modified: Mon, 22 F原创 2017-08-31 11:37:26 · 323 阅读 · 0 评论 -
第五十二篇:JAVA简易WEB服务器(二)
在上一篇博客中《JAVA简易WEB服务器(一)》我们了解了浏览器与服务端之间的通信数据的格式。这一篇博客开始,我们会一步一步的完成一个简易的WEB服务器的开发,需要注意的是,这里介绍的只是一种思路,毕竟开发一个服务器的工作量是很大的,而且需要考虑的事情很多,这里面我们只是简单的实现其部分功能,有兴趣可以自己进行扩展,深入研究。言归正传,这一篇博客我们需要实现的是对浏览器请求的解析。 首原创 2017-08-31 11:36:06 · 450 阅读 · 0 评论 -
第五十一篇:JAVA简易WEB服务器(一)
这一篇博客开始将和大家一起使用Java编写一个简易的Web服务器。 众所周知Web服务器与客户端之间的通信是使用HTTP协议的。HTTP是一个客户端和服务器端请求和应答的标准(TCP)。因为HTTP协议是基于TCP协议的,所以我将使用JAVA中的Socket完成这个简易的Web服务器。关于HTTP更详细的资料,各位可以查阅相关资料进行了解。 在服务器编写之前,我们还是先来看一下浏览器与服务原创 2017-08-31 11:33:47 · 327 阅读 · 0 评论 -
第四十九篇: JAVA加密解密之凯撒加密(Caesar cipher)算法
凯撒加密算法简介凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,x会被替换为a。凯撒加密算法实现package com.jianggujin.codec;原创 2017-08-31 11:29:56 · 1077 阅读 · 1 评论 -
第四十八篇:JAVA加密解密之DSA(Digital Signature Algorithm)算法
DSA算法简介DSA-Digital Signature Algorithm是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。如果数据和签名不匹配则认为验证失败!数字签名的作用就是校原创 2017-08-31 11:29:19 · 2588 阅读 · 1 评论 -
第四十七篇: JAVA加密解密之消息认证码算法(Message Authentication Code,MAC)
消息认证码算法简介在密码学中,消息认证码(英语:Message authentication code,缩写为MAC),又译为消息鉴别码、文件消息认证码、讯息鉴别码、信息认证码,是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。原创 2017-08-31 10:19:27 · 1417 阅读 · 0 评论 -
第四十六篇: JAVA加密解密之消息摘要算法(MessageDigest)
消息摘要算法简介消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。近年来,随着计算机性能的飞速改善,加密速度不原创 2017-08-31 10:18:15 · 1601 阅读 · 0 评论 -
第五十篇: JAVA加密解密之数字证书
系统之间在进行交互的时候,我们经常会用到数字证书,数字证书可以帮我们验证身份等,下面我们就来看一下在Java中如何使用数字证书。 我们先使用keytool工具生成密钥库并导出公钥证书。 第一步:生成keyStroe文件 执行如下命令:keytool -genkey -validity 36000 -alias www.jianggujin.com -keyalg RSA -原创 2017-08-31 11:30:43 · 772 阅读 · 0 评论 -
第四十五篇:JAVA8 新特性:默认方法
在JAVA8的新特性里面有一个接口的默认方法,可以编写方法的默认实现方式,而不需实现类重写,刚看到这个特性的时候第一反应就是:啥米,接口可以编写方法,颠覆了以往的认知啊。 下面就来说道说道为何会引入这样的新特性,在JAVA8中引入了lambda表达式,可以进行函数式编程,为了适应lambda,JAVA8在Iterable接口中增加了forEach方法用于遍历元素,这样就导致实现类中也要实现该方原创 2017-08-31 10:16:03 · 221 阅读 · 0 评论 -
第四十四篇:Java 7新特性:自动化资源管理
在JAVA7中为我们提供了一些很方便的新特性,如自动资源管理、数字字面量下划线支持、switch中使用string等,今天介绍一下自动资源管理。Java中某些资源是需要手动关闭的,如InputStream,Writes,Sockets,Sql classes等。自动资源管理允许try语句本身申请更多的资源,这些资源作用于try代码块,并自动关闭。首先我们来看一下传统的读取文件的方法原创 2017-08-31 10:13:59 · 184 阅读 · 0 评论 -
第四十三篇:Imaging (previously called Sanselan)读取图像信息
Imaging (previously called Sanselan)是Apache开源组织提供的用于操作图像的工具包。我们可以通过该包中提供的Sanselan很方便的获取图片信息以及存储保存工作。这个项目目前还属于孵化中的项目,尚未正式发布,我们直接上代码:package com.gujin.sanselan;import java.io.File;import org.apach原创 2017-08-31 09:58:32 · 560 阅读 · 0 评论 -
第四十二篇:JAVA限制文本框输入
我们在做Java GUI开发的时候,有的时候需要对文本框中的内容进行限制,比如最大长度、转换为大写等。今天就为大家介绍一下该如何实现。通过查阅JDK API,我们可以知道,在JTextField中提供了setDocument(Document doc)方法,用于将编辑器与一个文本文档关联。那么我们就需要使用它啦。Document是一个接口,有如下几个实现类:Abstra原创 2017-08-31 09:54:38 · 681 阅读 · 0 评论 -
第四十一篇: JAVA读取图像metadata信息
最近在做一个项目的时候需要要用的解析图像的拍摄时间,这些信息用图像查看工具基本都可以看到,之前有研究过MP3的文件格式,通过一些Tag来标记文件的一些信息,受此启发,猜测图像应该也有类似的机制。所以网上搜索了一下图像文件的存储格式,然后就查到了Exif规范,相机在拍照后按照Exif的相关规范,可以将拍摄时间、GPS等信息写入文件,我们按照规范格式将相关信息独取出来就好了,我上传了一份《Exif2.原创 2017-08-30 11:54:50 · 3608 阅读 · 1 评论 -
第四十篇:JAVA获得版本号以及字节码编译版本
公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取class或jar文件的编译版本,供大家参考。package com.jinggujin.util;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import原创 2017-08-30 11:53:37 · 453 阅读 · 0 评论 -
第五十四篇:JAVA简易WEB服务器(四)
在之前的博客中,我们完成了WEB服务器的请求解析以及响应,达到了最基本的要求,我们都知道WEB服务器在处理请求的时候可以获得客户端提交的参数外,还可以获得Cookie信息,响应的时候也会对Cookie进行修改,当然了,Cookie我们可以通过读取或设置头信息来处理,但是这样会很麻烦,所以我们需要将Cookie的处理抽取出来,方便我们使用。另外,服务器在响应客户端请求时不仅仅包含200状态码,还有可原创 2017-08-31 11:39:13 · 310 阅读 · 0 评论 -
第五十九篇:commons-collections使用介绍之Map
介绍完了List,我怕们继续来看commons-collections中为我们提供的Map相关的实现类。CaseInsensitiveMapCaseInsensitiveMap是一个对键的大小写不敏感的Map,在将键添加或与其它键比较之前,会将其转换为小写字符串。使用示例:package com.gujin.collections;import org.apache原创 2017-08-31 11:46:18 · 2064 阅读 · 0 评论 -
第五十八篇:commons-collections使用介绍之List
在上一篇博客中介绍了commons-collections中的Bag相关内容,这一篇将为大家介绍List相关的实现类。CursorableLinkedListCursorableLinkedList是List的一种实现,提供了一个列表迭代器并且允许修改列表。CursorableLinkedList支持所有可选列表的操作。它继承自AbstractLinkedList,提供了stack原创 2017-08-31 11:45:05 · 2067 阅读 · 1 评论 -
第一篇:JAVA获得设备信息
做Java开发时,可能会获得设备的一些信息,比如CPU、内存,做一些监控等,今天介绍一种JAVA获得设备信息的方式,使用的第三方包为sigar.jar(根据操作系统类型,还要添加对应的动态链接库)。 代码如下:import java.net.InetAddress;import java.util.Set;import java.util.TreeSet;import org.hy原创 2017-08-30 10:17:14 · 3906 阅读 · 0 评论 -
第二篇:JAVA获得任务栏高度
很多人在用Java做桌面应用程序的时候,有时候会用到在桌面右下角弹出提示框,就好像QQ登录后的提示一样,显示在桌面的右下角,任务栏的上面,过段时间自动消失,但是我们如何获得任务栏的高度呢,这个问题我原来也纠结了一段时间,有的人说,JAVA无法做到,要用到JNI编程,用C/C++去获得任务栏高度,今天我为大家介绍一种方法,不需要这么麻烦。 在JAVA中已经为我们提供了获得容器边界的类Insets原创 2017-08-30 10:21:34 · 530 阅读 · 0 评论 -
第三篇:JAVA动态(可变)参数
在之前我们编写的方法中,形参的个数都是固定不变的,有的时候,我们需要传递多个参数,按照传统的方法,我们需要要编写多个方法,这样会显得很麻烦,在Java中,有一套机制可以实现这样的功能,即动态(可变)参数。我们需要在形参类型后面加上...来表明该形参为动态参数,且该参数必须放在形参列表的最后一个。废话不多说,直接上代码:/** * 动态参数示例,我们可以把动态参数当作数组处理 * * @原创 2017-08-30 10:23:44 · 3483 阅读 · 0 评论 -
第四篇:JAVA操作Excel
Excel是我们平时工作中比较常用的用于存储二维表数据的,Java也可以直接对Excel进行操作,在这篇博客中将为大家介绍两种操作Excel的方式,分别为:jxl和poi。jxl写Excelimport java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.write.Label;原创 2017-08-30 10:26:29 · 183 阅读 · 0 评论 -
第六十五篇: commons-csv读写CSV文件
commons-csv是Apache开源组织提供的用于读写CSV文件的工具包,比较简单,直接上代码:package com.gujin.csv;import java.io.FileReader;import java.io.PrintWriter;import org.apache.commons.csv.CSVFormat;import org.apache.commons.c原创 2017-08-31 11:54:05 · 5394 阅读 · 0 评论 -
第六十四篇:commons-configuration使用介绍
commons-configuration是Apache开源组织提供的用于操作配置文件的工具包。配置参数的来源可以是:Properties files、XML documents、Windows INI files、Property list files (plist)、JNDI、JDBC Datasource、System properties、Applet parameters和Servl原创 2017-08-31 11:53:04 · 982 阅读 · 0 评论 -
第六十三篇:common-compress压缩解压文件
commons-compress是Apache开源组织提供的用于压缩解压的工具包。commons-compress支持常见的压缩格式,今天为大家写一个压缩解压zip文件的例子,关于更多commons-compress的示例可参见:Commons Compress – Commons Compress Examples在之前,我也写过一篇博客《JAVA文件压缩、解压》,使用了JDK中的A原创 2017-08-31 11:51:25 · 2058 阅读 · 0 评论 -
第六十二篇:commons-codec使用介绍
commons-codec是Apache开源组织提供的用于摘要运算、编码的包。在该包中主要分为四类加密:BinaryEncoders、DigestEncoders、LanguageEncoders、NetworkEncoders。今天就为大家介绍一下如何用commons-codec包完成常见的编码、摘要运算。Base64示例代码:@Testpublic void te原创 2017-08-31 11:50:11 · 1228 阅读 · 0 评论 -
第六十一篇:commons-cli使用介绍
commons-cli是Apache开源组织提供的用于解析命令行参数的包,命令行的处理共分为三个阶段:定义阶段、解析阶段和审讯阶段。在定义阶段,我们需要使用Options类来定义我们需要使用的命令。方法摘要:返回值方法名说明OptionsaddOption(Option opt)添加一个选项实例原创 2017-08-31 11:48:56 · 815 阅读 · 0 评论 -
第六十篇:commons-beanutils使用介绍
commons-beanutils是Apache开源组织提供的用于操作Java BEAN的工具包。使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作。今天为大家介绍一下该包的常用方法。在介绍常用类之前,我们先来 编写一个用于测试的BEAN类:package com.gujin.entity;public class UserInfo{ pr原创 2017-08-31 11:47:20 · 870 阅读 · 0 评论 -
Java相关开发汇总
不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!相关开发获得设备信息获得任务栏高度动态(可变)参数操作Excel汉字转拼音探测文件编码生成条码(jbarcode)生成二维码(zxing)变更文件监听文件压缩、解压对象持久化解析XMLSFTP(安全文件传送协议)操作枚举类型反射机原创 2017-09-08 09:06:34 · 501 阅读 · 0 评论 -
第五十六篇: commons-dbutils使用介绍
commons-dbutils是Apache开源组织提供的用于操作数据库的工具包。今天为大家介绍一下该包的常用方法。 对于数据库的操作无外乎增删改查,而增删改本质上可以归为一类,操作方式相同,只是SQL语法不同而已,所以我将以修改和查询两类来介绍commons-dbutils的用法。首先我们来创建一个测试类,使用JUnit进行测试。import java.sql.Connectio原创 2017-08-31 11:42:26 · 332 阅读 · 0 评论 -
第五十五篇: JAVA简易WEB服务器(五)
在之前的几篇博客中,我们的服务器已经具备雏形了,我们还需要继续对其进行优化,在《JAVA简易WEB服务器(三)》中,我们启动服务器的方法如下: /** * 启动服务器 */ public synchronized void start() { try { serverSocket = new ServerSocket(port); LOG原创 2017-08-31 11:40:31 · 187 阅读 · 0 评论 -
第五十七篇:commons-collections使用介绍之Bag
在commons-collections中为我们提供了一些关于集合的实现,今天为大家介绍一下Bag相关类的用法。概述Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数。 假设你有一个包,包含{a, a, b, c}。调用getCount(a)方法将返回2,调用uniqueset()方法将返回{a, b, c}。API方法摘要原创 2017-08-31 11:43:57 · 892 阅读 · 0 评论 -
第三十九篇:JAVA自定义日期选择器
用Java swing写的一个日期选择器.先上效果图代码如下:package com.jianggujin;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import原创 2017-08-30 11:52:16 · 1360 阅读 · 0 评论 -
第三十八篇:JAVA循环冗余校验(CRC32)
CRC32简介CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。 CRC32检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯原创 2017-08-30 11:50:01 · 480 阅读 · 0 评论 -
第三十七篇:JAVA验证身份证号是否合法
身份证作为居民的唯一标识。在很多系统中需要用户输入身份证号信息,今天我们就来编写一个方法验证身份证号的合法性。首先我们来看看身份证号的编码规则: 前1-2位数字表示:所在省(直辖市、自治区)的代码; 第3-4位数字表示:所在地级市(自治州)的代码; 第5-6位数字表示:所在区(县、自治县、县级市)的代码; 第7-14位数字表示:出生年、月、日; 第15-16位数字表示:原创 2017-08-30 11:43:11 · 425 阅读 · 0 评论 -
第十二篇:JAVA加密解密之常用签名算法
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。 MD5即Message-Digest原创 2017-08-30 10:43:13 · 322 阅读 · 0 评论 -
第十三篇:JAVA对象持久化
持久化就是将内存中的数据保存起来,使之可以长期存在。在Java中,我们可以把JAVA对象直接保存在文件中,在需要使用的时候,直接从文件中读取,这也是对象持久化的一种方式,在这一篇博客中,将演示两种将JAVA对象持久化到文件的方法,直接上代码:import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.Fi原创 2017-08-30 10:52:28 · 3055 阅读 · 0 评论 -
第十四篇: JAVA解析XML
在Java中最常用的解析xml的方式有四种,分别为:sax、dom、dom4j、jdom。sax方式的解析是基于事件的,比较适合大数据的解析,而dom的方式会将xml加载到内存中,构建出dom树,解析大文件时容易造成内存溢出,在实际开发中,我们应该选择最合适的解析方式。假设我们有这样一个xml文件:xml> userId>userId> userName>userName>原创 2017-08-30 10:53:47 · 215 阅读 · 0 评论 -
第十五篇:JAVA加密解密之对称加密
对称加密简介需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。 因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密原创 2017-08-30 10:57:20 · 247 阅读 · 0 评论 -
第十六篇:JAVA加密解密之3DES(TripleDES)
3DES算法简介3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密原创 2017-08-30 10:58:48 · 553 阅读 · 0 评论