文章目录
1、java nio是什么
2、netty是什么、做什么用
3、netty相关产品有哪些
正文部分
1、java nio是什么
1.1、java io
io是主存和外部设备(硬盘、终端、网络等)之间拷贝数据的过程,io是操作系统底层功能的实现。
操作系统底层通过io指令完成io操作,所有语言运行时系统提供执行I/O较高级别的工具。
比如:c语言提供的输入输出函数,java语言提供的面向对象的封装。
字节流(inputStream,outputStream)和字符流(reader,writer),老的io体系,阻塞式io。java nio为异步非阻塞new io。
sun公司标榜的java nio特性如下:
a.为所有原始类型提供buffer缓存支持。
b.字符集编码解码解决方案。java.nio.charset
c.一个新的原始io抽象,Channel通道。
d.支持锁和内存映射文件的文件访问接口。
e.提供多路non-bloking非阻塞式的高伸缩性的网络io。
更多细节如下:
通道和缓冲区,新的io体系,非阻塞式io
buffer //一个连续的内存块,nio数据读取的中转站
channel //数据的源头或者数据的目的地,buffer的接口
Buffer 常见方法:
flip(): 写模式转换成读模式
rewind():将position 重置为0,一般用于重复读。
clear():清空buffer,准备再次被写入(position变成0,limit变成capacity)。
compact(): 将未读取的数据拷贝到buffer的头部位。
mark()、reset():mark可以标记一个位置,reset可以重置到该位置。
Buffer常见类型,基本数据类型的都有对应的buffer类
ByteBuffer
CharBuffer
StringBuffer
MappedByteBuffer
...
Channel常见类型
FileChannel
DatagramChannel(UDP)
SocketChannel(TCP)
ServerSocketChannel(TCP)
另外,java.nio.charset提供了编码解码的一套解决方案。
Selector
每个线程的处理流程大概都是读取数据、解码、计算处理、编码、发送响应。 //解包、解码、业务处理、编码、发包流程。
异步IO的核心类,它能检测一个或多个通道(channel)上的事件,并将事件分发出去。
使用一个select线程就能监听多个通道上的事件,并基于事件驱动触发相应的响应。而不需要为每个channel去分配一个线程。
SelectionKey
包含了事件的状态信息和时间对应的通道的绑定。
2、netty是什么、做什么用
2.1、netty是什么
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty支持多种协议,包括HTTP,TCP,UDP,SMTP,FTP以及二进制文本协议等等,另外Netty文档齐全,总之一句话Netty很牛逼很强大。。。
官方标榜如下:
Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and various binary and text-based legacy protocols. As a result, Netty has succeeded to find a way to achieve ease of development, performance, stability, and flexibility without a compromise.
学习网站:
netty官方网站:http://netty.io/
netty官方api:http://netty.io/4.0/api/
netty下载地址:http://netty.io/downloads.html
github地址:https://github.com/netty/netty
官方提供的入门文档:http://netty.io/4.0/guide/
2.2、netty做什么用
Netty是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目。
最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。
3、netty相关产品有哪些
apache mina:http://mina.apache.org/ 出自同一作者