- 博客(13)
- 收藏
- 关注
原创 报错:java.lang.IllegalArgumentException
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986。relaxed-query-chars
2023-10-17 14:32:29
2369
原创 Java实现AES,SM4等对称加密算法,Linux环境解密失败,SecureRandom生成密钥不一致
实现的加密解密算法在本地window环境运行正常,加密后解密可以得到原始文本,但是部署到linux测试环境之后报错,解密失败。
2023-10-12 16:52:35
644
原创 异步回调机制(Netty 学习七)
FutureTask,基础异步回调框架Runnable接口的run方法是无返回值的,为了获取线程运行的返回值,java引入了Callable接口,用来弥补这个缺憾。代码实例: FutureTask<Boolean> futureTask = new FutureTask(new Callable<Integer>() { @Override public Integer call() throws Exception {
2020-11-02 17:46:29
738
原创 多线程Reactor反应器(Netty 学习六)
多线程Reactor反应器上一篇介绍了单线程Reactor反应器模式的代码实例。虽然利用NIO模式减少了创建线程的性能损耗,但是由于是单线程,单个反应器内部是阻塞式的。为了加强服务端性能,我们引入多线程模式。引入两个Selector,两个Reactor。代码如下:public class MultiReactor { AtomicInteger post = new AtomicInteger(0); Selector [] selectors = new Selector[2];
2020-10-11 23:03:01
142
原创 Reactor反应器模式(Netty 学习五)
什么是Reactor反应器模式由Reactor反应器(线程)来负责响应IO事件,分发事件,由Handler处理器(线程)来负责处理事件。Reactor和若干的Handler组成了反应器模式。传统的OIO是采用一个线程处理一个网络连接的方式来增加吞吐量,Reactor模式与传统的OIO类似,换成了NIO模型,相应的增加了Reactor来监听分发事件,Handler由原来的处理链接,变成对监听事件的处理。单线程Reactor示例知道了Reactor模式的定义,来写一个实例,从单线程Reactor反应器开始
2020-09-13 21:17:20
114
原创 DatagramChannel简述(Netty 学习四)
DatagramChannel前面介绍了TCP协议的SocketChannel,接下来介绍一下UDP协议的DatagramChannel。DatagramChannel类也支持非阻塞式IO,同时支持数据的发送与接收,发送用send方法,接收用receive方法。因为前面SocketChannel做基础,这里不做过多解释,直接看代码示例。服务端NIO模式代码: try { //打开选择器 Selector selector = Selector.open
2020-09-01 20:19:41
814
2
原创 SocketChannel解密Java的NIO模型 (Netty 学习三)
阻塞IO网络IO提供了阻塞和非阻塞两种模式,首先我们来看一下阻塞IO的代码示例。服务端: try { //打开服务端通道 ServerSocketChannel ssc = ServerSocketChannel.open(); //绑定地址端口号 ssc.bind(new InetSocketAddress(7890)); //循环接收 while(true
2020-08-20 20:08:23
88
原创 Buffer和FileChannel (Netty 学习二)
Java的NIO类之BufferBuffer是一个抽象类,Java的基础类型都有相应的具体实现,初始化一个对应的Buffer就是分配相应的一段内存,底层的数据结构是数组,然后做了对应的封装。内部主要通过四个成员变量控制,capacity(容量),limit(限量),position(位置),mark(标记)。分别提供初始化、读写以及其他的便捷操作。下面是示例代码及注释(以IntBuffer为例): //Buffer初始化,分配一段可以容纳5个int值的内存,capacity = 5
2020-08-17 16:27:46
183
原创 IO浅析(Netty 学习一)
IO基本原理要讲IO,首先我们要了解一下底层read和write系统,上层程序的IO读写都是依赖它们的。read读操作:将内核缓存区指定的数据复制到用户进程缓存区;write写操作:将用户内存缓冲区的数据写到内核缓存区。由此可见,read&write是不操作磁盘的,原因是避免频繁的磁盘读取(磁盘读取会影响操作系统的性能,具体原因不在这里做解释)。那么以Java的IO为例,一个读操作的流程如下图参考文档#mermaid-svg-HYWKdIasnhI4XyQl .label { f
2020-08-11 21:06:43
112
原创 Java位运算及逻辑运算符
Java位运算及逻辑运算符位运算符逻辑运算符位运算符int a = 6&1;“&”:位与运算,同位全部为1,结果为1,否则为0。上面的例子a的值为0;int a = 6|1;“I”:位或运算,同位有一个值为1,结果为1,否则为0。上面的例子a的值为7;int a = ~1;“~”:位非运算,值为1,返回0,值为0,结果为1。上面的例子a的值为-2(八位二进制:11111110,补码算法,首位1为符号表示,表示负数,1111110取反加1,0000001+1 = 2,最后结
2020-08-05 20:16:19
227
原创 JDK1.8的新特性
Lambda表达式Lambda是1.8中新加的语法糖(不是内部类,匿名类的语法糖),Lambda表达式逻辑上可以理解成实现一个匿名类,这个类只定义了一个方法。Lambda有两个好处:1.编码简洁;2.配合1.8中的新编程方式:函数式接口(FunctionalInterface);Lambda表达式的格式:(parameters) -> expression,Comparable实现...
2019-12-18 21:29:26
101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人