📅  最后修改于: 2023-12-03 15:15:57.346000             🧑  作者: Mango
Java NIO(New IO)是Java SDK 1.4引入的新的IO API。它提供了更快速、更多样化和更可伸缩的输入/输出操作,取代了原始IO API的一部分功能。
Java NIO的特点包括:
Java NIO主要由以下几个组件组成:
Java NIO适合于需要处理大量连接的网络应用,如聊天服务器、游戏服务器、流媒体服务器等等。Java NIO也可以用于文件IO。
// 使用Java NIO实现HTTPServer
public class HttpServer {
public static void main(String[] args) throws IOException {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(8080));
serverSocketChannel.configureBlocking(false);
Selector selector = Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
int readyChannels = selector.select();
if (readyChannels == 0) {
continue;
}
Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectedKeys.iterator();
while (keyIterator.hasNext()) {
SelectionKey key = keyIterator.next();
if (key.isAcceptable()) {
SocketChannel clientChannel = serverSocketChannel.accept();
clientChannel.configureBlocking(false);
clientChannel.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
SocketChannel clientChannel = (SocketChannel) key.channel();
ByteBuffer buf = ByteBuffer.allocate(1024);
clientChannel.read(buf);
buf.flip();
String request = new String(buf.array()).trim();
String response = "HTTP/1.1 200 OK\n" +
"Content-Type: text/html; charset=UTF-8\n\n" +
"<html><body>Hello World!</body></html>";
clientChannel.write(ByteBuffer.wrap(response.getBytes()));
clientChannel.close();
}
keyIterator.remove();
}
}
}
}
以上示例代码实现了一个简单的HTTP服务器,使用Java NIO实现。在循环中,程序等待事件(使用选择器),当有事件时分发线程来处理。处理代码不同于常规的Socket IO,需要更多的代码,如显示地获取和释放缓冲区并确定定义好使用缓冲区的方式。