面试题答案
一键面试数据传输方式
- 传统I/O流:基于字节流和字符流进行数据传输。字节流以字节为单位处理数据,例如
InputStream
和OutputStream
;字符流以字符为单位,会考虑字符编码,如Reader
和Writer
。数据传输通常是顺序的,从流的一端到另一端依次读取或写入。 - NIO通道:基于缓冲区(
Buffer
)进行数据传输。数据先从通道读取到缓冲区,然后从缓冲区写入到通道。这种方式允许更灵活的数据操作,因为可以在缓冲区中对数据进行处理,如标记、重置等。
读写模式
- 传统I/O流:是阻塞式的。当调用
read()
或write()
方法时,线程会被阻塞,直到数据传输完成。例如,在从网络套接字读取数据时,如果没有数据到达,线程会一直等待,无法执行其他任务。 - NIO通道:支持非阻塞式读写。可以通过设置通道为非阻塞模式,在数据未准备好时,
read()
或write()
方法会立即返回,线程可以继续执行其他操作,提高了程序的并发性能。同时,NIO提供了选择器(Selector
)机制,允许一个线程管理多个通道,进一步提升了I/O操作的效率。
功能特性
- 传统I/O流:设计简单直接,适用于简单的I/O操作场景。但是在处理大量并发连接或高性能要求的场景下,由于其阻塞特性,会导致线程资源的大量消耗,性能较低。
- NIO通道:具有更高的灵活性和可扩展性。除了支持非阻塞I/O,还提供了更丰富的功能,如文件通道可以进行内存映射(
map()
方法),将文件直接映射到内存,提高文件读写效率。同时,NIO的缓冲区管理和通道操作使得在处理复杂的I/O场景时更加高效和便捷,适合开发高性能、高并发的网络应用和服务器程序。