第二部分第三小节:
在这里表示读取信息失败 , 内部也有一个failed方法表示的就是写入信息失败 。
第三部分:
这也是一个failed方法 , 表示的是链接客户端失败 。
到这里我们会看到 , AIO的代码逻辑很复杂 , 在这里只是实现一个最简单的通信例子就这么麻烦 , 稍微增加点功能代码逻辑会让我们发疯 。不过为了保持代码的完整性 , 我们还是要给出客户端的实现 。
2、客户端
客户端的实现就比较简单了 。
第一步:创建客户端入口类
文章插图
在这里我们同样使用一个AioClientHandle来处理客户端的代码逻辑 , 现在我们继续看代码 。
第二步:AioClientHandle类实现:
文章插图
文章插图
文章插图
文章插图
?这个代码逻辑和服务端的差不多 , 在这里就不说了 。下面我们主要分析一下为什么不用AIO 。
三、AIO的缺点
上面BB了这么久就是为了说明为什么不使用他 , 你千万别急 , 因为知己知彼才能百战不殆 。你只有理解了AIO才能知道工作中应该用什么 ,
1、实现复杂
上面的代码量你已经看到了 , 恶心到不能恶心 。实现这么一个简单的功能就要写这么多 。
2、需要额外的技能
也就是说你想要学号AIO , 还需要java多线程的技术做铺垫才可以 。否则我们很难写出质量高的代码 。
3、一个著名的Selector空轮询bug
它会导致CPU100% , 之前在我的群里面 , 有人曾经遇到过这个问题 , 而且官方说在1.6的版本中解决 , 但是现在还有 。遇到的时候我们虽然可以解决但是不知道的人会很痛苦 。
4、可靠性差
也就是说我们的网络状态是复杂多样的 , 会遇到各种各样的问题 , 比如说网断重连、缓存失效、半包读写等等 。可靠性比较差 。稍微出现一个问题 , 还需要大量的代码去完善 。
当然还有很多其他的缺点 , 不过就单单第一条估计就很难发展 。后来出现了更加牛的网络通信框架netty 。很好的解决了上面的问题 , 也是目前最主流的框架 。更多内容 , 在后续文章中推出 。今天的文章先到这 , 感谢支持 。
【聊聊java中NIO的2.0版本AIO】
推荐阅读
- 中国茶叶发展简史
- 有趣的茶码
- 吃海鲜可以喝白酒吗
- 中国六大茶树品种序列
- 什么人不能吃鲫鱼
- 本命年红绳可以年前戴吗,本命年红绳可以在年中开始带吗
- 生番茄能吃吗
- 四种饮食搭配最毁容
- 中国茶道的精神是什么
- 这5款走出国门的“侨销茶”,是几代海外华人杯中的乡愁