Java NIO和IO的区别
2016-06-19 19:52
344 查看
IO的主要内容
File
InputStream
OutputStream
Reader
Writer
RandomAccessFile
NIO有以下核心的数据抽象类型。
Buffer
Channels
Selector
IO是面向流(Stream)的,NIO是面向缓冲(Buffer)的。
面向流就是每次都是流中读取一个或多个字节/字符,直至读完所有的字节/字符,不能前后移动流中的数据;面向缓冲是将数据读取到一个他稍后处理的缓冲区,需要的时候可以在缓冲区中移动。
IO中的各种流都是阻塞的,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取或数据完全写入。这个线程在这个期间不能干任何事,NIO的非阻塞模式,一个线程从某个通道发出请求读取数据,但它仅能得到当前可用的数据,如果没有数据可用时,就什么都不获取,而不是保持线程阻塞,该线程还可以做其他事情。线程通常将非阻塞IO的空闲时间用于其他通道执行IO操作,所以一个单独的线程可以管理多个输入和输出通道。
Java NIO有选择器,允许一个单独的线程监视多个输入通道,可以注册多个通道使用一个选择器,可以使用一个单独的线程来选择通道:这个通道已经有可以处理的输入,或者选择以准备写入的通道。
File
InputStream
OutputStream
Reader
Writer
RandomAccessFile
NIO有以下核心的数据抽象类型。
Buffer
Channels
Selector
IO是面向流(Stream)的,NIO是面向缓冲(Buffer)的。
面向流就是每次都是流中读取一个或多个字节/字符,直至读完所有的字节/字符,不能前后移动流中的数据;面向缓冲是将数据读取到一个他稍后处理的缓冲区,需要的时候可以在缓冲区中移动。
IO中的各种流都是阻塞的,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取或数据完全写入。这个线程在这个期间不能干任何事,NIO的非阻塞模式,一个线程从某个通道发出请求读取数据,但它仅能得到当前可用的数据,如果没有数据可用时,就什么都不获取,而不是保持线程阻塞,该线程还可以做其他事情。线程通常将非阻塞IO的空闲时间用于其他通道执行IO操作,所以一个单独的线程可以管理多个输入和输出通道。
Java NIO有选择器,允许一个单独的线程监视多个输入通道,可以注册多个通道使用一个选择器,可以使用一个单独的线程来选择通道:这个通道已经有可以处理的输入,或者选择以准备写入的通道。
相关文章推荐
- Spring mvc Interceptor 解决Session超时配置流程
- Java 实现日期 Date 的赋值
- java之jce
- SpringMVC加载自定义目录下的springmvc.xml配置文件
- Java泛型简介
- 学习javaweb过程中遇到的一些小error
- eclipse插件
- MyEclipse配置SVN,从SVN中导出项目
- java中方法重载和重写的区别
- java学习总结
- 20145212《Java程序程序设计》课程总结
- Eclipse不自动编译java文件的终极解决方法
- Quartz总结(一):Quartz集成Spring的2个方法
- Java多线程 之 原子性与可见性(八)
- SpringMVC框架学习(1)--执行原理 及 xml注解配置说明
- java 单元测试框架-JUnit4
- Java实现windows7标准型计算器
- Struts2(四):在Action中如何访问Web资源
- JAVA小知识
- myeclipse使用中遇到的问题搜集