千家信息网

java中NIO的用法

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章主要讲解了"java中NIO的用法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中NIO的用法"吧!背景Linux系统中的IO操作内部
千家信息网最后更新 2024年11月27日java中NIO的用法

这篇文章主要讲解了"java中NIO的用法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中NIO的用法"吧!

背景

Linux系统中的IO操作内部相当复杂,下面是一张带图片的LinuxIO相关层级关系:

下面是一个简化版本Linux内部IO层级图:

对此我的理解,java程序员版本的IO理解:

java中的IO

从最早bio的只支持阻塞的bio(同步阻塞)

到默认阻塞支持非阻塞nio(同步非阻塞+同步阻塞)

再到aio(异步非阻塞)

NIO

  • FileChannel:从文件读取数据的

  • DatagramChannel:读写UDP网络协议数据

  • SocketChannel:读写TCP网络协议数据

  • ServerSocketChannel:可以监听TCP连接

示例代码: socket https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/socket/nio file https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/file/nio

AIO

示例代码: socket https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/socket/aio file https://github.com/victorsheng/verification-everything/tree/master/io/src/main/java/file/aio

NIO的应用

作为jdk的基础类库,被很多应用使用了,此处列举了几个常见的

tomcat

http://tomcat.apache.org/tomcat-9.0-doc/config/http.html#Connector_Comparison

jetty

Prior to Jetty 9, the type of the connector reflected both the protocol supported (HTTP, HTTPS, AJP, SPDY), and the nature of the implementation (NIO or BIO). From Jetty 9 onwards there is only one prime Connector type (ServerConnector), which is NIO based and uses Connection Factories to handle one or more protocols.

https://www.eclipse.org/jetty/documentation/9.4.x/quickstart-config-what.html#intro-jetty-configuration-connectors

netty

作为nio最常用的封装类库

总结

nio更多解决的是线程资源的浪费,而非单个操作响应时间的提升

使用NIO != 高性能,当连接数<1000,并发程度不高或者局域网环境下NIO并没有显著的性能优势。

NIO并没有完全屏蔽平台差异,它仍然是基于各个操作系统的I/O系统实现的,差异仍然存在。使用NIO做网络编程构建事件驱动模型并不容易,陷阱重重。 推荐大家使用成熟的NIO框架,如Netty,MINA等。解决了很多NIO的陷阱,并屏蔽了操作系统的差异,有较好的性能和编程模型。

感谢各位的阅读,以上就是"java中NIO的用法"的内容了,经过本文的学习后,相信大家对java中NIO的用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0