
Java
文章平均质量分 89
吴声子夜歌
个人学习记录
展开
-
Java—— CompletableFuture
在JAVA8开始引入了全新的CompletableFuture类,它是Future接口的一个实现类。也就是在Future接口的基础上,额外封装提供了一些执行方法,用来解决Future使用场景中的一些不足,对流水线处理能力提供了支持。CompletableFuture 可以从全局的 ForkJoinPool.commonPool() 获得一个线程中执行这些任务。但也可以创建一个线程池并传给 runAsync() 和 supplyAsync() 来让他们从线程池中获取一个线程执行它们的任务。原创 2024-11-02 14:21:42 · 1229 阅读 · 0 评论 -
Java——正则表达式详解
Java对正则表达式的支持是从1.4版本开始的,此前的JRE版本不支持正则表达式。Java语言中的正则表达式匹配功能主要是通过和类实现的。find():在一个字符串里寻找一个给定模式的匹配:用一个给定的模式尝试匹配一个字符串的开头matches():用一个给定的模式去尝试匹配一个完整的字符串:进行替换操作,对所有的匹配都进行替换:进行替换操作,只对第一个匹配进行替换compile():把一个正则表达式编译成一个模式flags():返回某给定模式的匹配标志matches()原创 2024-03-07 13:29:16 · 15141 阅读 · 4 评论 -
Java——JAVE(音视频格式转换)
JAVE (Java Audio Video Encoder)是一个纯Java的音视频编码器和解码器库,它是基于FFmpeg。JAVE库提供了一些简单易用的API,用于音频和视频格式的转换、编码、解码等操作。它对于一些基本的音视频处理任务来说是一个不错的选择。这些库都是基于FFmpeg的,并允许在Java中处理音频和视频文件。使用它们可以避免直接调用外部的FFmpeg命令行工具,而是通过Java API来实现音频格式转换等操作。原创 2024-03-03 17:53:39 · 18988 阅读 · 0 评论 -
Java——高级Swing和图形化编程(二)
目录高级Swing和图形化编程(二)3、高级AWT3.1、绘图操作流程3.2、形状1)、形状类层次结构2)、使用形状类3.3、区域3.4、笔画3.5、着色3.6、坐标变换3.7、剪切3.8、透明与组合4、像素图4.1、图像的读取器和写入器1)、获得适合图像文件类型的读取器和写入器2)、读取和写入带有多个图像的文件3)、示例4)、API4.2、图像处理1)、构建像素图2)、图像过滤高级Swing和图形化编程(二)3、高级AWT3.1、绘图操作流程在最初的JDK1.0中,用来绘制形状的是一种非常简单的机原创 2024-02-19 21:42:36 · 1711 阅读 · 0 评论 -
Java——高级Swing和图形化编程(一)
目录高级Swing和图形化编程(一)1、表格1.1、一个简单表格1.2、表格模型1.3、对行和列的操作1)、各种列类2)、访问表格列3)、改变列的大小4)、改变行的大小5)、选择行、列和单元格6)、对行排序7)、过滤行8)、隐藏和显示列9)、示例10)、API1.4、单元格的绘制和编辑1)、绘制单元格2)、绘制表头3)、单元格编辑4)、定制编辑器5)、API2、树2.1、简单的树1)、示例2)、编辑树和树的路径3)、API2.2、节点枚举2.3、绘制节点2.4、监听树事件2.5、定制树模型高级Swing和原创 2024-02-17 15:08:48 · 1559 阅读 · 0 评论 -
Java——Swing详解
目录Swing1、Swing和MVC设计模式2、布局管理2.1、布局管理器2.2、边框布局2.3、网格布局3、文本输入3.1、文本域3.2、标签和标签组件3.3、密码域3.4、文本区3.5、滚动窗格4、选择组件4.1、复选框4.2、单选按钮4.3、边框4.4、组合框4.5、滑动条5、菜单5.1、菜单构建5.2、菜单项中的图标5.3、复选框和单选按钮菜单项5.4、弹出菜单5.5、键盘助记符和加速器5.6、启用和禁用菜单项5.7、工具条5.8、工具提示6、复杂的布局管理6.1、网格包布局1)、gridx、gri原创 2024-02-14 02:10:16 · 10617 阅读 · 1 评论 -
Java——AWT详解
接口方法参数/访问方法时间源JComboBoxJTextFieldTimerJScrollbarItemEvent.getItem()JComboBoxfocusLostFocusEventComponentkeyTypedKeyEventComponentMouseEvent.getX().getY()ComponentmouseMovedMouseEventComponentComponentWindowWindowWindow。原创 2024-02-12 19:34:35 · 4956 阅读 · 1 评论 -
Java——常用JSON解析库详解(fastjson2、gson、jackson)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相比xml数据交换格式来说,因为解析xml比较的复杂且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。JSON简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。fastjson:阿里gson:谷歌jackson:SpringMVC自带。原创 2024-02-07 23:19:49 · 4985 阅读 · 0 评论 -
Java——二维码详解
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一种编码方式。它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码()是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;原创 2024-02-03 00:59:26 · 6036 阅读 · 2 评论 -
Java——本地方法(JNA)详解
JNA 全称 Java Native Access,是一个建立在经典的 JNI 技术之上的 Java 开源框架。JNA 提供一组 Java 工具类用于在运行期动态访问系统本地库(native library:如 Window 的 dll)而不需要编写任何 Native/JNI 代码。开发人员只要在一个 java 接口中描述目标 native library 的函数与结构,JNA 将自动实现 Java 接口到native function 的映射。原创 2023-12-18 01:51:45 · 9094 阅读 · 1 评论 -
Java——本地方法(JNI)详解
1)、关于Load与LoadLibrary这里 System.load 方法需要读取 .dylib 的绝对路径,如果使用 System.loadLibrary 方法则需要传相对路径,这里建议大家写绝对路径,肯定不会出错。原创 2023-12-15 20:36:45 · 1861 阅读 · 0 评论 -
Java——国家商用密码详解(SM2、SM3、SM4)
国密即国家密码局认定的国产密码算法,即商用密码。商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。为了保障在金融、医疗等领域保障信息传输安全,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)等。SSF33、SM1、SM4、SM7是对称算法SM2、SM9是非对称算法SM3是哈希算法。原创 2023-12-11 23:34:10 · 4243 阅读 · 0 评论 -
Java——加密/解密相关类(java.security、javax.crypto、javax.net.ssl)
目录Java加密/解密相关类1、Java与密码学1.1、Java安全领域组成部分1.2、安全提供者体系结构2、java.security包详解2.1、Provider类2.2、Security类2.3、MessageDigest类2.4、DigestInputStream类2.5、DigestOutputStream类2.6、Key接口1)、SecretKey2)、PublicKey和PrivateKey2.7、AlgorithmParameters类2.8、AlgorithmParameterGenera原创 2023-12-10 00:03:40 · 2695 阅读 · 0 评论 -
Java——安全协议详解
HTTPS协议和SSL/TLS协议分属TCP/IP参考模型中的应用层和传输层。简单地说,HTTPS就是附加了SSL/TLS协议的HTTP协议,就是HTTP安全版。HTTPS协议为数字证书提供了最佳的应用环境。原创 2023-12-06 22:33:26 · 615 阅读 · 0 评论 -
Java——数字证书详解
数字证书集合了多种密码学算法:自身带有公钥信息,可完成相应的加密/解密操作;同时,还带有数字签名,可鉴别消息来源;且自身带有消息摘要信息,可验证证书的完整性;由于证书本身含有用户身份信息,因而具有认证性。数字证书具备常规加密/解密必要的信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户(计算机)身份。数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体。依靠数字证书,我们可以构建一个简单的加密网络应用平台。原创 2023-12-04 17:58:50 · 1742 阅读 · 0 评论 -
Java——OpenSSL工具示例
2、进制转换openssl未提供进制转换功能,此处使用xxd命令。语法:可用选项:2.1、二进制每组16位:每行24位,每8位一组2.2、十六进制纯输出十六进制:十六进制还原为ASCII:3、摘要3.1、MD53.2、SHA3.3、Hmac4、数字签名4.1、RSA4.2、DSA5、对称加密openssl enc命令的加密/解密实际需要3个参数:指定参数的方式有两种:第一种方式:指定口令,随机参数生成的参数:加密的结果:b.txt第原创 2023-12-04 00:55:24 · 1932 阅读 · 0 评论 -
Java——OpenSSL工具详解
c 使用:号分隔输出-r 以coreutils的格式输出-d 输出调试信息-hex 以16进制的格式输出中,默认-binary 以二进制的格式输出-sign file 使用文件中的私钥签名摘要-verify file 使用文件中的公钥验证签名-prverify file 使用文件中的私钥验证签名-keyform arg 密钥文件格式,默认PEM-out filename 输出到文件名而不是stdout-signature file 要验证的签名文件-sigopt nm:v 签名参数。原创 2023-12-01 23:30:01 · 6322 阅读 · 0 评论 -
Java——Keytool工具详解
示例:正常的CA签发证书需要收费,所以我们只能用acton.keystore密钥库中的acton的私钥来签发acton.csr,自己给自己签发证书。keytool为java原生自带,安装java后不需要再进行安装,作为密钥和证书管理工具,方便用户能够管理自己的公钥/私钥及证书,用于认证服务。此时已经生成了一个没有经过认证的数字证书,和一个JKS格式的密钥库。示例:将自己签发完毕的acton_sign.cer导入到密钥库。示例:修改acton为newacton。示例:修改密钥库密码。注意:密钥至少为6位。原创 2023-11-27 20:02:28 · 4610 阅读 · 0 评论 -
Java——加密算法详解(二)
DH(Diffie-Hellman)密钥交换算法主要是为了解决密钥交换而发展出来的。DH算法是一个密钥协商算法,仅能用于密钥分配,不能用于加密或解密。DH算法的安全性基于有限域上的离散对数难题,基于这种安全性,通过DH算法进行密钥分配,使得消息的收发双方可以安全地交换一个秘密密钥,再通过这个密钥对数据进行加密和解密处理。算法密钥长度密钥长度默认值工作模式填充方式备注DH512至1024位(密钥长度为64倍数,范围在512-1024位之间)1024无无Java7实现。原创 2023-11-25 19:06:10 · 799 阅读 · 0 评论 -
Java——加密算法详解(一)
目录加密算法1、概述1.1、加密算法分类1.2、java中的算法1.3、依赖2、Base64(电子邮件传输算法)2.1、Base641)、定义2)、实现原理3)、模型分析4)、Java实现5)、Bouncy Caste实现6)、Commons Codec实现2.2、Url Base641)、定义2)、Java实现3)、Bouncy Castle实现3)、Commons Codec实现3、消息摘要算法(Message Digest)3.1、MD算法1)、定义2)、模型分析3)、Java实现4)、Bouncy原创 2023-11-24 22:19:45 · 530 阅读 · 0 评论 -
Java——安全机制详解
ClassLoader超类的loadClass方法用于将类的加载操作委托给其父类加载器去进行,只有当该类尚未加载并且父类加载器也无法加载该类时,才调用findClass方法。为来自本地文件系统或者其他来源的类加载其字节码。调用ClassLoader超类的defineClass方法,向虚拟机提供字节码。return age;super();while (-1!原创 2023-11-15 19:00:32 · 1806 阅读 · 0 评论 -
Java——注解详解
注解是那些插入到源代码中使用其它工具可以对其进行处理的标签。这些工具可以在源码层次上进行操作,或者可以处理编译器在其中放置了注解的类文件。注解不会改变程序的编译方式。Java编泽器对于包含注解和不包含注解的代码会生成相同的虚拟机指令。注解的一些可能的用法:注解是由注解接口来定义的:例如,下面的注解具有两个元素:assignedTo和serverity:所有的注解接口都隐式地扩展自接口。这个接口是一个常规接口,不是一个注解接口:注解元素的类型为下列之一:1.2、注解格式每个注解都具有下面这种格式:原创 2023-11-10 16:37:15 · 5474 阅读 · 0 评论 -
Java——日期与时间详解
旧API:定义在java.util包中,包括DateCalendarTimeZone等新API:java8引入,定义在java.time里,包括ZoneId等LocalDateTime和ZonedDateTime均可格式化。// 自定义输出格式:// 用自定义格式解析://默认地区//2022 一月 12 星期三 15:23//中国地区//2022 一月 12 星期三 15:23//美国地区//下一个工作日@Overridedo {原创 2023-11-06 03:00:46 · 870 阅读 · 0 评论 -
Java——RMI详解
RMI 是 Java 提供的一个完善的简单易用的远程方法调用框架,采用客户/服务器通信方式,在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上远程对象的方法,它要求客户端与服务器端都是 Java 程序。RMI 框架采用代理来负责客户与远程对象之间通过 Socket 进行通信的细节。RMI 框架为远程对象分别生成了客户端代理和服务器端代理。位于客户端的代理必被称为存根(Stub),位于服务器端的代理类被称为骨架(Skeleton)。原创 2023-08-03 17:30:27 · 8399 阅读 · 2 评论 -
Java——SPI机制详解
SPI 全称是 Service Provider Interface,是一种 JDK 内置的动态加载实现扩展点的机制,通过 SPI 技术我们可以动态获取接口的实现类,不用自己来创建。这个不是什么特别的技术,只是 一种设计理念。在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发现机制。原创 2023-08-03 01:27:02 · 2684 阅读 · 0 评论 -
ConcurrentLinkedQueue的入队和出队原理详解
入队(offer)/** * Inserts the specified element at the tail of this queue. * As the queue is unbounded, this method will never return {@code false}. * * @return {@code true} (as specified by {@link Queue#offer}) * @throws NullPointerException if the spe原创 2020-05-17 16:16:12 · 760 阅读 · 0 评论 -
Java创建对象的5种方式
Java创建对象的5种方式直接new,调用了构造器通过clone(),没有调用构造器通过反射,调用了构造器通过反序列化,没有调用构造器通过Unsafe类的allocateInstance()方法,没有调用构造器1. 直接newpublic class CreateByNew { public CreateByNew() { System.out.prin...原创 2020-05-06 11:48:17 · 921 阅读 · 2 评论 -
ThreadLocal--使用、原理
ThreadLocalThreadLocal,即线程变量,是一个以ThreadLocal为键、任意对象为值得存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。可以通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值。public class ThreadLocal_Test implemen...原创 2020-05-06 10:59:38 · 281 阅读 · 0 评论 -
ThreadLocal--内存泄漏问题及Java的对应处理办法
内存泄漏问题线程变量存储在ThreadLocalMap中,ThreadLocal只是作为key存在,而ThreadLocalMap中key为ThreadLocal的若引用。弱引用的特点是,如果这个对象只存在弱引用,那么在下一次垃圾回收的时候必然会被清理掉。所以如果 ThreadLocal 没有被外部强引用的情况下,在垃圾回收的时候会被清理掉的,这样一来 ThreadLocalMap中使用这...原创 2020-05-05 23:11:22 · 824 阅读 · 0 评论 -
Java--Files
FielsFiles类可以使得普通文件操作变得快捷。例如,可以用下面的方式很容易地读取文件的所有内容:byte[] bytes = Files.readAllBytes(path);如果像将文件当做字符串读入,那么可以在调用readAllBytes之后执行下面的代码:String content = new String(bytes, charset);但是如果希望将文件当做行序列...原创 2020-03-27 12:08:54 · 3993 阅读 · 0 评论 -
Java--Path详解
PathPath表示的是一个目录名序列,其后还可以跟着一个文件名。路径中的第一个部件可以是根部件,例如/或C:\,而允许访问的根部件取决于文件系统。以根部件开始的路径是绝对路径;否则,就是相对路径。例如,我们要分别创建一个绝对路径和一个相对路径;其中,对于绝对路径,我们假设计算机运行的是类Unix的文件系统:Path absolute = Paths.get("/Users", "acto...原创 2020-03-26 23:58:25 · 17285 阅读 · 0 评论 -
Optional类型
Optional类型optional<T>对象是一种包装器对象,要么包装了类型T对象,要么没有包装任何对象。对于第一种情况,称这种值为存在的。Optional<T>类型被当做一种更安全的方式,用来替代类型T的引用,这种引用要么引用某个对象,要么为null。但是,它只有在正确使用的情况下才会更安全。使用Optional值有效地使用Optional的关键是要使用这样的方法...原创 2020-03-25 12:43:10 · 1463 阅读 · 0 评论 -
Stream--流编程
Stream流编程Stream不是集合元素,也不是数据结构,它相当于一个 高级版本的 Iterator,不可以重复遍历里面的数据,像水一样,流过了就一去不复返。它和普通的 Iterator 不同的是,它可以并行遍历,普通的 Iterator 只能是串行,在一个线程中执行。外部迭代与内部迭代使用for等进行迭代我们叫做外部迭代,使用stream流迭代叫做内部迭代。public class S...原创 2020-03-24 17:25:36 · 1229 阅读 · 0 评论 -
Java--管道输入/输出流
管道输入/输出流管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。管道输入/输出流主要包括了如下4种具体实现:PipedOutputStreamPipedInputStreamPipedReaderPipedWriter前两种面向字节,而后两种面向字符。示例:创建printThread,它用来接受mai...原创 2020-01-19 20:19:15 · 541 阅读 · 1 评论 -
Java--实现多线程的三种方法
Java多线程编程Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的...原创 2020-01-15 00:18:42 · 204 阅读 · 0 评论 -
Java--国际化概念和使用介绍
Java国际化概念和使用介绍国际化是商业软件系统的一个基本要求,因为当今的软件系统需要面对全球的浏览者。国际化的目的就是根据用户的语言环境的不同向用户输出与之相应的页面,以示友好。程序国际化已成为 Web 应用的基本要求。随着网络的发展,大部分 Web 站点面对的已经不再是本地或者本国的浏览者,而是来自全世界各国、各地区的浏览者,因此国际化成为了 Web 应用不可或缺的一部分。Java 国际...原创 2019-11-04 12:29:31 · 623 阅读 · 0 评论 -
Java--大数值(BigInteger 和 BigDecimal)
如果基本的整数和浮点数精度不能够满足需求,那么可以使用 java.math 包中的两个很有用的类:BigInteger 和 BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。使用静态的 valueOf 方法可以将普通的数值转换为大数值:BigInteger a = BigIntege...原创 2019-08-23 10:14:19 · 1044 阅读 · 0 评论 -
Java--包装类详解(自动装箱和自动拆箱)
对象包装器与自动装箱 有时,需要将 int 这样的基本类型转换为对象。所有的基本类型都有一个与之相对应的类。例如,Integer 类对应基本类型 int。通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void 和 Boolean(前6个类派生于公共的超类 Number)。...原创 2019-08-24 19:10:43 · 1130 阅读 · 0 评论 -
Java基本数据类型详解
Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。整型整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型,具体内容如下表所示。类型存储需求取值范围...原创 2019-08-21 13:18:37 · 1515 阅读 · 0 评论 -
Java--String常用API
char charAt(int index)返回给指定位置的代码单元。除非对底层的代码单元感兴趣,否则不需要调用这个方法。int codePointAt(int index) 5.0返回从给定位置开始的码点。int offsetByCodePoints(int startIndex, int cpCount) 5.0返回从startIndex代码点开始,位移cpCount后的...原创 2019-08-22 13:28:16 · 978 阅读 · 0 评论