NIO:Java Non-blocking IO(Java非阻塞I/O)
关键词:
Channel(通道) Buffer(缓存区) Selector(选择器)
Channel(通道)类似于Java传统读取IO中的Stream,但是区别是一个Stream一般是只能读或者只能写,比如InputStream只能read、OutputStream只能write。但是Channel既能读也能写。
Buffer(缓存区),NIO中读写的东西一般都要先放在Buffer中。
Selector(选择器)是NIO中最关键的一个部分,Selector的作用就是用来轮询每个注册的Channel,一旦发现Channel有注册的事件发生,便获取事件然后进行处理。
重点了解数据传输的过程,不论读写都先到buffer。
Selector
Handle
register
当前留下的NIO是netty
问题:buffer之间也有数据交换?selecter的事件处理 channel上的事件定义
socket和servlet有什么异同?
Socket是j2se在网络编程这块最基本的东西。把一系列网络io复杂性封装。但是光有io,光能传输数据,不足以完成标准化的网络通信。所以在这个基础上,加入了协议支持。比如web容器(tomcat等)加入了http协议的解析(所谓的协议,就是一系列带有标准格式的字符串)。而把里面可以独立给程序员的模型接口抽取出来,就是Servlet。所以,Servlet可以看做是web容器运行的一部分逻辑(请求和响应,即request和response其实可以看成是dto,最后执行完servlet.service方法后,由容器传递给socket类的outputstream,完成相关操作)。而Socket则是web容器的核心(负责交换协议)。
参考:
Java Socket实战之六 使用NIO包实现Socket通信