📜  Java NIO 简介与示例(1)

📅  最后修改于: 2023-12-03 15:31:31.643000             🧑  作者: Mango

Java NIO 简介与示例

Java NIO(New IO)是Java SE 1.4中的新增特性,提供了更快速、更高效、更灵活的IO方式。相比传统的IO操作,NIO使用了非阻塞IO模式,能够更好地处理大量的客户端连接。

NIO API的核心在于三个主要概念:ChannelBufferSelector。Channel表示与实体之间的连接,例如网络连接;Buffer用于数据的读写;Selector则是用于监听多个Channel的状态,从而实现单线程同时处理多个Channel。

下面是一个简单的NIO示例,演示了如何使用NIO读取文件内容:

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class NIOExample {
    public static void main(String[] args) {
        Path filePath = Paths.get("example.txt");
        try (FileChannel channel = FileChannel.open(filePath, StandardOpenOption.READ)) {
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while (channel.read(buffer) > 0) {
                buffer.flip();
                while (buffer.hasRemaining()) {
                    System.out.print((char) buffer.get());
                }
                buffer.clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们首先通过Paths.get()方法获取到文件的路径,然后通过FileChannel.open()方法打开文件通道。接着,我们创建了一个大小为1024的ByteBuffer对象,用于读取数据。

在读取数据之前,我们需要调用flip()方法将Buffer从写模式切换到读模式,这样可以读取之前写入的数据。然后通过一个循环,不断调用channel.read()方法将数据读入到Buffer中。最后,我们再次调用flip()方法,将Buffer从读模式切换到写模式,然后通过buffer.get()方法读取Buffer中的数据。

这个例子只是NIO的冰山一角,NIO还有很多强大的特性,例如异步IO、文件锁、多线程读写等,可以帮助开发者更好地处理IO操作。如果你想深入了解NIO,建议看一下官方文档,里面有详细的介绍和示例代码。