![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NIO编程
Janson_LBJ
改变世界格局
展开
-
NIO编程-文件IO
1.文件IO 概述和核心API 缓冲区(Buffer):实际上是一个容器,是一个特殊的数组,缓冲区对象内置了一些机 制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道, 但是读取或写入的数据都必须经由Buffer,如下图所示: 在NIO 中,Buffer 是一个顶层父类,它是一个抽象类,常用的Buffer 子类有: ByteBuffer,存储字节数据到缓...原创 2019-09-01 18:42:01 · 151 阅读 · 0 评论 -
NIO编程-网络编程(socket)
1.通过NIO实现网络编程 概述和核心API 前面在进行文件IO 时用到的FileChannel 并不支持非阻塞操作,学习NIO 主要就是进行 网络IO,Java NIO 中的网络通道是非阻塞IO 的实现,基于事件驱动,非常适用于服务器需 要维持大量连接,但是数据交换量不大的情况,例如一些即时通信的服务等等.... 在Java 中编写Socket 服务器,通常有以下几种模式: 一个客户端连接...原创 2019-09-01 18:49:16 · 341 阅读 · 0 评论 -
NIO编程中,报“远程主机强迫关闭了一个现有的连接”IOException
JavaNIO聊天室 中,若客户端强制关闭,服务器会报“Java.io.IOException: 远程主机强迫关闭了一个现有的连接。”,并且服务器会在报错后停止运行,错误的意思就是客户端关闭了,但是服务器还在从这个套接字通道读取数据,便抛出IOException,导致这种情况出现的原因就是,客户端异常关闭后,服务器的选择器会获取到与客户端套接字对应的套接字通道SelectionKey,并且这个k...原创 2019-09-01 21:09:23 · 625 阅读 · 0 评论 -
NIO编程中,socket服务端重启后,客户端报java.nio.channels.ClosedChannelException
这个问题是客户端和服务器的管道关闭了。导致这个问题的原因是服务端程序重启或者关闭重开导致的。 解决这个问题的方法是在捕获异常的时候,对报错位置进行try-catch 。如果报错,先把原来的网络管道socketchannel关闭,重新创建管道并连接服务端,注意不是创建客户端对象而是管道 代码如下: ...原创 2019-09-01 21:53:50 · 1464 阅读 · 0 评论