博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NIO与IO的区别
阅读量:6348 次
发布时间:2019-06-22

本文共 859 字,大约阅读时间需要 2 分钟。

     在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据块,按块处理要比按字节处理数据快的多。

     NIO与IO有相同的作用,但NIO支持面向缓冲区的、基于通道的IO操作,NIO将更加高效的读写操作。

NIO与IO的区别

  (1)IO是面向流的,NIO是面向缓冲区的

              用IO进行数据读写时,数据库与程序之间会有一个流,可以理解为数据流动的管道,数据在这个管道中进行读写,并且这个管道是单向的,也就是说读的管道与写的是两个不同的管道,而且一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢。

              用NIO对数据读写时,数据库与程序之间会有一个通道,这个通道内部没有数据流动,只是作为缓冲区的载体,而缓冲区中存放了一定数量的数据在通道上流动,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据块,按块处理要比按字节处理数据快的多。

   (2)IO是阻塞的,NIO是非阻塞的    

              传统的IO流都是阻塞的,即一个线程对数据进行读写时,该线程被阻塞,直到有一些数据被读取或写入,在此过程中,该线程不能执行其他任何任务(因此,在完成网络通信进行IO操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理。当服务器需要处理大量客户端时,性能急剧下降)

              JAVA NIO 时非阻塞模式的,当线程从通道进行数据读写时,若没有数据可用时,该线程可以进行其他任务,线程通常将非阻塞IO空闲时间用于其他通道上执行IO操作,所有单独的线 程可以管理多个输入和输出通道,因此,NIO可以让服务器端使用一个或有限个线程来连接到服务器端的所有客户。

转载于:https://www.cnblogs.com/xyzyj/p/7347573.html

你可能感兴趣的文章
java代码实现开启openoffice服务和关闭sffice.exe进程
查看>>
docker镜像的使用方法
查看>>
提升HTTPS安全评级
查看>>
iOS开发过程中的心得
查看>>
QOS配置命令
查看>>
linux安装搭建media-wiki
查看>>
使用 MPI for Python 并行化遗传算法
查看>>
widget
查看>>
paramiko安装及使用
查看>>
Java私塾:研磨设计模式 之 访问者模式(Visitor)
查看>>
我的友情链接
查看>>
《Python网络数据采集》读书笔记(六)
查看>>
Linux必学的60个命令
查看>>
iptables 学习笔记 (上)
查看>>
Windows Server 2012 R2 Active Directory(活动目录)实验一
查看>>
android viewpager 无限左右滑动
查看>>
linux下SSH远程连接服务慢解决方案
查看>>
利用mic visual studio 2010 编译器执行wincap获取网络适配器的代码
查看>>
HTML
查看>>
CENTOS7下编译安装PHP-5.4以及配置phpMyAdmin
查看>>