io和nio的区别
Posted zqlmianshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了io和nio的区别相关的知识,希望对你有一定的参考价值。
NIO与IO区别
IO是面向流的,NIO是面向缓冲区的
Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方;
NIO则能前后移动流中的数据,因为是面向缓冲区的
IO流是阻塞的,NIO流是不阻塞的
Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了
Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。NIO可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。
选择器
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
NIO的优势:
1.优势在于一个线程管理多个通道;但是数据的处理将会变得复杂;
2.如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,采用这种;
传统IO的优势:
1.适用于一个线程管理一个通道的情况;因为其中的流数据的读取是阻塞的;
2.如果需要管理同时打开不太多的连接,这些连接会发送大量的数据;
IO和NIO的区别
参考技术AIO和NIO的区别
IO的作用
IO 的作用就是从外部程序读取数据到java程序中,或者把java中输出的数据回写到外部系统。这里的外部系统可能是磁盘,网络流等。与外部数据进行交互,这就是 IO 的作用>
所有IO的本质都是对缓冲的处理,不管是度还是写,都会把数据放到缓冲~
IO与NIO的区别
首先它们都属于IO,只是处理的方式不同。
java 中, IO 属于 流式IO ,即 Stream/IO 。它只能一个字节一个字节的处理数据。
而 NIO 是以 Block 的方式来读取数据的,以 块 的形式从磁盘上读取数据,所以它能提升 IO 的效率。
Stream/IO 是阻塞的,当线程进行读写操作时,线程会被阻塞,数据只能处理一次,不能回退。而 NIO 是非阻塞的。
IO 中的类:write,reader,inPutStream,outPutStream等
NIO 中,由于是从磁盘读取数据,处理 块 的信息,所以缓冲是一个非常重要的概念,基本上它的大部分类都与缓冲相关。包括基础类型的 buff : ShortBuffer,FloatBuffer,ByteBuffer 等。
管道 也是 NIO 中一个很重要的概念, NIO 通过管道读取数据。
以上是关于io和nio的区别的主要内容,如果未能解决你的问题,请参考以下文章