Java NIO
来源:互联网 发布:巅峰软件大全手机 编辑:程序博客网 时间:2024/06/05 19:16
作为C/C++程序员,初次听到Java NIO这个名词有点茫然。仔细学习了Java NIO的细节和用法,个人理解如下:
其实Java NIO的功能对C程序员并不陌生,和我们经常接触的 select / poll / epoll 是类似的。本质上Java NIO在Linux 2.6内核之后就是通过epoll来实现。
不论 Java NIO还是 C中的 select / poll / epoll, 其设计思路就是对传统的阻塞型 I/O 做补充完善,实现非阻塞 I/O;
我们知道,在传统的阻塞型I/O中,accept()等待过程中若没有新的连接请求到来,就一直阻塞;请求读写过程在等待数据时也会阻塞。考虑到每来一个新连接通常需要开启一个新线程去处理,如果许多线程处在阻塞状态,无疑是对计算资源的浪费。
Java NIO提供事件驱动的非阻塞型I/O,面对多个连接请求(不论是来自块设备还是Socket连接)的情况,可以把众多连接侦听放在一个或尽可能少的进程中进行管理,请求到达时则可以派发给相关线程处理。这对于处理高并发且所需响应时间很短的event,将会非常高效。
当然,Java NIO还提供了所谓的块读写, 相比Java IO有优势。传统的Java IO, 程序需要生成Java对象(比较多的是String类型)来存储每次从连接中读到的数据,处理数据后这些临时的对象又要被释放。极端情况下,如果每次读取1字节数据,这种临时对象的创建和删除会相当低效。Java NIO提供了Buffer读写功能,数据从连接读出后直接存放到Buffer(缓存)中,无需字符串对象做中间存储,这就减少了不必要的性能和资源损耗。
先总结这么多,若有不当之处还请Java高手指正。最后还是要Highlight 下IBM的高质量文档,下面这篇关于Java NIO入门的介绍非常经典,可以作为学习参考:
http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html
- Java NIO: NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- NIO--JAVA NIO 入门
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- 计算机组成原理学习笔记(二)
- Intent
- 2.1 “关系”数据库,什么是“关系”?
- tomcat下如何修改访问路径
- c++超基础:多态——下、抽象类与虚函数
- Java NIO
- 全国省份、城市关联表 mysql(含城市名拼音)
- spring web flow
- Oracle BPM开发中遇到的一些问题和解决方法
- Hibernate关系映射
- Oracle中Hint深入理解
- Video Tracking Theory and Practice 关键翻译1
- Pat(Advanced Level)Practice--1086(Tree Traversals Again)
- HDOJ2680 Choose the best route