java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JAVA IO和NIO的主要区别

JAVA IO和NIO的主要区别及使用说明

作者:night_gu

Java IO(BIO)阻塞式,逐字节流处理;NIO非阻塞,基于缓冲区和通道实现多路复用,单线程管理多连接,适合高并发网络编程,IO代码简单但性能低,NIO性能高但复杂度增加,选择需权衡开发效率与性能需求

JAVA IO和NIO的主要区别

IO(BIO)是阻塞的,NIO是非阻塞的

传统IO在读写数据时会阻塞线程,直到数据准备好或完全写入。

例如,InputStream.read()会一直阻塞,直到有数据可读。NIO通过通道(Channel)和选择器(Selector)实现非阻塞模式,线程可以处理其他任务,无需等待数据就绪。

IO面向流,NIO面向缓冲区

IO基于流(Stream)模型,数据只能单向流动(输入流或输出流)。NIO基于缓冲区(Buffer)和通道,数据先读写到缓冲区,再通过通道双向传输,支持更灵活的数据处理。

NIO支持多路复用

NIO通过Selector监控多个通道的事件(如连接、读写),单线程即可管理多个连接,适合高并发场景。传统IO每个连接需独立线程处理,资源消耗大。

核心组件对比

IO的核心类

NIO的核心类

性能与应用场景

IO适用场景

NIO适用场景

代码示例对比

传统IO读取文件

try (FileInputStream fis = new FileInputStream("file.txt")) {
    int data;
    while ((data = fis.read()) != -1) {
        System.out.print((char) data);
    }
}

NIO读取文件

try (FileChannel channel = FileChannel.open(Paths.get("file.txt"))) {
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    while (channel.read(buffer) != -1) {
        buffer.flip();
        while (buffer.hasRemaining()) {
            System.out.print((char) buffer.get());
        }
        buffer.clear();
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文