您现在的位置是:首页» windows系统» java中的io与nio,java中nio与bio的区别

java中的io与nio,java中nio与bio的区别

2023-10-16 17:08:31
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!  Java NIO,它是Java中的一种新型I/O(输入/输出)方式,包含了三个基本组件:buffer(缓冲区)、channel(通道)和selector(选择器)。这三个组件的作用非常重要,它们是

今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!

  Java NIO,它是Java中的一种新型I/O(输入/输出)方式,包含了三个基本组件:buffer(缓冲区)、channel(通道)和selector(选择器)。这三个组件的作用非常重要,它们是实现Java NIO的基石。

  首先,我们来说说buffer。NIO是基于缓冲区的,所以buffer可以说是最底层的必要类。与传统的IO不同,NIO直接将数据读取到buffer中,并在buffer中进行操作。如果是处理文本,还需要使用charset类进行编解码操作。

  接下来是channel。它类似于IO中的stream,但与IO不同的是,除了FileChannel外,其他channel都可以以非阻塞的方式运行。FileChannel用于处理文件操作,可以直接通过DMA(直接内存访问)操作内存,而不依赖CPU。而其他类型的通道,如socketchannel,在数据准备好之后再进行调用。

  最后是selector。selector用于将请求分发到不同的channel,这样可以确保channel在没有阻塞的情况下进行收发消息。可以说,selector能够让channel在闲置时自由休息。

  接下来,我们来说说Java NIO与传统IO之间最大的区别。第一个区别是,IO是面向流的,而NIO是面向缓冲区的。所谓面向流,意味着每次从流中读取一个或多个字节,直到读取完所有字节,它们没有被缓存在任何地方。而NIO则是将数据读取到稍后处理的缓冲区中,在需要的时候可以在缓冲区中前后移动。这增加了处理过程的灵活性,但也需要确保缓冲区中包含了所有需要处理的数据,并且不要覆盖尚未处理的数据。

  另外,NIO的缓冲区还可以使用直接内存缓冲区。这种缓冲区并不在Java虚拟机的堆内存中,性能可能略好一些。然而,由于直接缓冲区会增加垃圾回收的负担,所以在大多数情况下,我们还是建议使用Java虚拟机的缓冲区。

  然后,我们来说说阻塞与非阻塞。传统的IO操作是阻塞式的,当进行读取或写入的时候,它们会一直等待,直到有数据可读/写入后才会进行处理。而NIO是非阻塞式的,当进行读写操作时,只会返回当前已经准备好的数据,如果没有数据可读/写入,就会返回空。这样,当前的线程就可以处理其他事情,提高资源的利用率。

  在传统的IO包中,serverSocket和socket都是阻塞式的,因此一旦有大规模的并发行为,每个访问都会开启一个新线程。这样就会有大量的线程上下文切换操作,并且会影响新的线程的响应率。而在NIO包中,只需要将serverSocket和socket注册到一个selector中,当有数据放入通道时,selector就会知道哪些channel已经就绪,然后就可以做出对应的处理。这样,服务端只需要一个线程就可以处理大部分情况。

  通过比较可以看出,IO是直连的,每个请求都会给一条线程来处理,而NIO则是基于反应堆(selector)来处理,只有在读写的数据准备好后才会通知相应的线程进行处理。可以说,selector不会让channel白白占据资源,它会在闲置时去找其他活干。

  总结一下,Java NIO是一种新型的I/O方式,它与传统的IO相比,具有很多优势。NIO是面向缓冲区的,可以增加处理过程的灵活性。它支持阻塞和非阻塞式的操作,极大地提高了资源的利用率。通过选择器的应用,NIO可以处理大规模并发行为而不会影响新的线程的响应率。需要注意的是,在使用NIO进行传输时,我们还需要注意编解码的问题。

  希望这篇文章可以帮助你更好地理解Java NIO,如果还有什么问题,请随时提问。

wWw.Xtw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com

标签: 描述 java nio