精华内容
下载资源
问答
  • IO 和NIO的区别

    2020-10-12 20:56:22
    1.IO和NIO的区别 NIO就是New IO在JDK1.4中引入。 IO和NIO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO快不少。 在Java API中提供了两套NIO,一套针对标准输入输出NIO,另一套就是...

    1.IO和NIO的区别

    NIO就是New IO在JDK1.4中引入。

    IO和NIO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO快不少。

    在Java API中提供了两套NIO,一套针对标准输入输出NIO,另一套就是网络编程IO。

    IO NIO
    面向流 面向缓冲
    阻塞IO 非阻塞IO
    选择器

    ###① 面向流和面向缓冲区

    1. Java IO 是面向流的而Java NIO是面向缓冲区的,就如同一个的重点在于过程,另一重点在于一个有一个阶段。

      在Java IO中读取数据和写入数据是面向流(Stream)的,就如同河流一样。所有的数据不停地向前的流淌,我们只能触碰到当前的流水。

      如果需要获取某个数据的前一项或后一项数据那就必须自己缓存数据(将水从河流中打出来),而不能直接从流中获取(因为面向流就意味着我们只有一个数据流的切面)

    2. Java NIO中数据的读写是面向缓冲区(Buffer)的,读取时可以将整块的数据读取到缓冲区中,在写入时则可以将整个缓冲区中的数据一起写入。

      这就好像是在河流上建立水坝,面向流的数据读写只提供了一个数据流切面,而面向缓冲区的IO则使我们能够看到所有的水(数据的上下文),也就是说在缓冲区中获取某项数据的前一项数据或者是后一项数据十分方便。这种便利是有代价的,因为我们必须管理好缓冲区,这包括不能让新的数据覆盖了缓冲区中还没有被处理的有用数据;将缓冲区中的数据正确的分块,分清哪些被处理过哪些还没有等等。

    ##② 阻塞和非阻塞

    1. Java IO是阻塞的,如果在一次读写数据调用时数据还没有准备好,或者目前不可写,那么读写操作就会被阻塞直到数据准备好或目标可写为止

    2. Java NIO则是非阻塞的,每一次数据读写调用都会立即返回,并将目前可读(或可写)的内容写入缓冲区或者从缓冲区中输出,即使当前没有可用数据,调用仍然会立即返回并且不对缓冲区做任何操作。

      举个例子:

      IO和NIO去超市买东西,如果超市中没有需要的商品或者数量还不够, IO会一直等到超市中需要的商品数量足够了就将所有需要的商品带回来。Java NIO则不同,不论超市中有多少需要的商品,它都将有需要的商品,立即全部买下并返回,甚至是没有需要的商品也会立即返回。

      IO 要求一次完成任务,NIO允许多次完成任务

    2.IO和NIO的适用场景

    NIO是为弥补传统IO的不足而诞生的,但是NIO也有缺陷,应为NIO是面向缓冲区的操作,每一次的数据处理都是对缓冲区进行的,那就必须注意:在数据处理之前必须要判断缓冲区的数据是否完整或者已经读取完毕。如果没有,假设数据只读取了一部分,那么对不完整的数据处理没有任何意义。所以每次数据处理之前都要检测缓冲区。

    注意:每次要进行数据处理必须保证数据已经准备完毕,但数据处理可以有多次。

    IO和NIO各自使用场景:

    IO:少量的连接,这些连接每次都要发送大量的数据。

    NIO:需要管理同时打开的成千上万个连接,而这些链接每次只发送少量的数据,例如聊天服务器

    ##IO和NIO的工作流程

    Java IO 工作流程

    由于Java IO是阻塞的,所以当面对多个流的读写时需要多个线程处理。例如在网络IO中,Server端使用一个线程监听一个端口,一旦某个连接被accept,创建新的线程来处理新建立的连接。
    在这里插入图片描述

    其中 read/write 是阻塞的。

    Java NIO 工作流程

    Java NIO 提供 Selector 实现单个线程管理多个channel的功能。
    在这里插入图片描述

    其中select 调用可能是阻塞的,也可以是非阻塞的。但是read/write是非阻塞的!

    借鉴文章的文章-知行流浪

    展开全文
  • io和nio的区别

    2021-01-27 17:27:24
    面试官经常问io和nio的区别,如果把io和nio放一起比较的话,那这里的io可以理解为bio,即blocking-io: bio:同步阻塞 bio是java传统的io模型,他是同步阻塞io,一个线程触发io操作后,必须等待这个io操作执行完成...

    i/o即input/output,就是指读写操作

    面试官经常问io和nio的区别,如果把io和nio放一起比较的话,那这里的io可以理解为bio,即blocking-io:

    bio:同步阻塞

    bio是java传统的io模型,他是同步阻塞io,一个线程触发io操作后,必须等待这个io操作执行完成,期间不能去做其他事情;

    nio:同步非阻塞

    nio(non-blocking-io)是同步非阻塞io,一个线程触发io操作后它可以立即返回,但是他需要不断地轮询去获取返回结果;

    aio:异步非阻塞

    aio(Asynchronous-io)是异步非阻塞io,一个线程触发io操作后她可以立马返回去做其他事情,内核系统将io操作执行完成后会通知线程;

    多路复用io:异步阻塞

    io多路复用:可以理解为异步阻塞io,但官方没这么叫,一个线程可以管理多个连接,不用来回切换;

    展开全文
  • IO和NIO的区别

    2016-03-23 22:38:20
  • IO NIO 的区别

    2019-10-09 07:28:18
    IO:阻塞IO,面向流;当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被...NIO:非阻塞IO,面向缓冲;使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用数据,如果目前没有数据可...

    IO阻塞IO,面向流;当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入,该线程在此期间不能再干任何事情了;可以有少量的连接使用非常高的带宽,一次发送大量的数据

    如图:Java IO:  一个连接通过一个线程处理。

    NIO非阻塞IO,面向缓冲;使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情;使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。

    如图:Java NIO: 单线程管理多个连接。

    转载于:https://www.cnblogs.com/liuqing576598117/p/10304221.html

    展开全文
  • 一、概念NIO即New IO,这个库是在JDK1.4中才引入。NIO和IO有相同作用和目的,但实现...二、NIO和IO主要区别下表总结了Java IO和NIO之间主要区别:IONIO面向流面向缓冲阻塞IO非阻塞IO无选择器1、面向流与面向...
  • 导读热词简介终于要写到java中最最让人激动部分了IO和NIO。IO全称是input output,是java程序跟外部世界交流桥梁,IO指是java.io包中所有类,他们是从java1.0开始就存在。NIO叫做new IO,是在java1.4中...
  • 阻塞IO和NIO的区别

    2021-03-05 16:43:11
    阻塞IO和NIO的区别 个人理解 阻塞io 客户端连接后服务器创建一个socket与客户端的socket 通讯,这个 socket的方法需要线程运行,一个线程运行一个socket的服务即一个线程服务一个客户端,多个用户对应多个线程, 多...
  • Java IO NIO的区别

    2020-03-31 18:53:29
    Java IO NIO的区别 IO:Java IO中读取数据写入数据是面向流(Stream)的,也就是像工厂里面的流水线作业一样,所以也就成了阻塞式的,因为你必须等等这个流水线的数据准备好,不然,不可以操作,导致阻塞。 ...
  • Java中IO和NIO的区别

    千次阅读 多人点赞 2021-02-14 23:03:45
    一、概念   NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,...   Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字
  • 展开全部java.NIO包里包括三个基本的组件lbuffer:因32313133353236313431303231363533e78988e69d8331333361313965为NIO是基于缓冲的,所以buffer是最底层的必要类,这也是IO和NIO的根本不同,虽然stream等有buffer...
  • Java IO和NIO的区别

    2019-10-06 10:41:24
    一、概念 NIO即New IO,这个库是在JDK1.4中才引入。NIO和IO有相同作用和目的,但实现方式不同,NIO主要用到是块,所以...下表总结了Java IO和NIO之间主要区别: 1、面向流与面向缓冲 Java IO和NIO之间第...
  • IO NIO面向流 面向缓冲阻塞IO 非阻塞IO无 选择器面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。Java IO面向流意味着每次从流中读一个或多个字节,直...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,168
精华内容 867
关键字:

io和nio的区别