面试题答案
一键面试缓冲区使用
- Java I/O:基于流(Stream),没有缓冲区概念。数据以字节或字符序列的形式按顺序从流中读取或写入,如
InputStream
和OutputStream
,操作简单但效率较低,因为每次读写都可能涉及系统调用。 - Java NIO:引入了缓冲区(Buffer)概念,如
ByteBuffer
、CharBuffer
等。数据先读入缓冲区,再从缓冲区写入目标位置。缓冲区本质是一块内存区域,通过position
、limit
、capacity
等属性管理数据的读写,提高了数据操作的灵活性和效率。
数据传输方式
- Java I/O:采用阻塞式I/O,当进行读写操作时,线程会被阻塞,直到操作完成。例如在
InputStream.read()
调用时,线程等待数据可读,在此期间无法执行其他任务,对于高并发场景性能较差。 - Java NIO:支持非阻塞式I/O,通过
Selector
实现多路复用。一个Selector
可以管理多个通道(Channel),线程可以注册感兴趣的事件(如读、写)到通道上。线程不会因I/O操作而阻塞,可同时处理多个通道的I/O事件,大大提高了高并发情况下的系统性能。