MST
星途 面试题库

面试题:Java中Java I/O与NIO内存管理方式的差异

请阐述Java I/O和NIO在内存管理方面的主要差异,例如缓冲区的使用、数据传输方式等。
16.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

缓冲区使用

  • Java I/O:基于流(Stream),没有缓冲区概念。数据以字节或字符序列的形式按顺序从流中读取或写入,如InputStreamOutputStream,操作简单但效率较低,因为每次读写都可能涉及系统调用。
  • Java NIO:引入了缓冲区(Buffer)概念,如ByteBufferCharBuffer等。数据先读入缓冲区,再从缓冲区写入目标位置。缓冲区本质是一块内存区域,通过positionlimitcapacity等属性管理数据的读写,提高了数据操作的灵活性和效率。

数据传输方式

  • Java I/O:采用阻塞式I/O,当进行读写操作时,线程会被阻塞,直到操作完成。例如在InputStream.read()调用时,线程等待数据可读,在此期间无法执行其他任务,对于高并发场景性能较差。
  • Java NIO:支持非阻塞式I/O,通过Selector实现多路复用。一个Selector可以管理多个通道(Channel),线程可以注册感兴趣的事件(如读、写)到通道上。线程不会因I/O操作而阻塞,可同时处理多个通道的I/O事件,大大提高了高并发情况下的系统性能。