在有些时候,我们拿到了一张图片的二进制数据,但却不知道这张图片应该是什么格式。本文在此记录使用 Java 代码获取图片格式的一种方式:FileInputStream srcInputStream = new FileInputStream("D:\\tmp\\qr.png"); ImageInputStream imageInputStream = ImageIO.createImageInputStream(srcInputStream); // 获取 ImageReader 对象的迭代器 Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream); // 如果能获得 ImageReader 对象则说明流中含有图片文件 while (iterator.hasNext()) { // ImageReader 对象的 getFormatName() 方法可以获得图片格式 System.out.println(iterator.next().getFor
引言在 JAVA 语言中有 8 中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8 种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。接下来我们主要来谈一下String#intern方法。一, intern 的实现原理首先深入看一下它的实现原理。1,JAVA 代码/** * Returns a canonical representation for the string object. * <p> * A pool of strings, initially empty, is maintained privately by the * class <c
Java语言有一个重要的理念:万物皆对象。本文我们将要探讨的是,每一个对象中都存在的 equals 和 hashCode 方法。下图是 JDK 中顶级父类 Object 的结构图,从图中我们可以看到 Object 类为子类提供了可访问的 equals 和 hashCode 方法。Object 类的结构图equals 方法equals 方法用来判断其他对象是否和该对象相等。在 Object 中的源码如下:/** * Object 类的 equals 方法 */ public boolean equals(Object obj) { return (this == obj); }在这里,Object 类给出了最简单的实现,比较两个对象的内存地址是否相等。两个对象的内存地址相等,则是同一个对象,当然也是相等的。在实际的业务场景中,我们需要比较的往往是两个对象是否 逻辑相等,例如:比较字符串时,我们更关心的是两个字符串的内容是否相同。因此 JDK 中对 String 类的 equals 方法做了相关的重写。/** * String 类的 equals 方法 */ public
本文整理了 Java 和 js 关于RSA算法的互加解密,方便开发使用。部分代码来源于网络。公钥加密,私钥解密(同一公钥加密相同的数据,加密结果一般不同,与填充方式有关)私钥加密,公钥解密(同一私钥加密相同的数据,加密结果一定相同)私钥签名,公钥验签Java 和 js 互加解密 — RSA非对称加密开始之前对称加密算法和非对称加密算法比较对称加密算法: 加解密使用相同的密钥,安全性较低,计算量较小,加解密效率较高非对称加密算法: 加解密使用不同的密钥,安全性较高,计算量较大,加解密效率较低,可以做数字签名对称加密算法和非对称加密算法,怎么选择?参考HTTPS协议的加密方案:两种算法结合使用,使用非对称加密算法加密对称加密算法的密钥,使用对称加密算法加解密数据,既保证安全,又保证效率。RSA算法简介先看看基佬给我们的解释。RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工
本文整理了 Java 和 js 关于AES算法的互加解密,方便开发使用。部分代码来源于网络。js 前台加密数据,Java 后台解密数据。Java 和 js 互加解密 — AES对称加密AES算法简介高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。更多信息请查阅维基词条:高级加密标准Java实现AES加解密该工具类基于 jdk1.8 进行封装,如果你的 jdk 低于1.8,部分代码可能需要做一定的调整(如Base64编码解码)import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec