Java IO
Java BIO、NIO、线程模型、Netty相关原理
BIO
package com.nixum.bio;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BIOServer {
public static void main(String[] args) throws Exception {
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
//创建ServerSocket
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
// 主线程负责处理监听
final Socket socket = serverSocket.accept();
// 创建线程处理请求
newCachedThreadPool.execute(() -> {
handler(socket);
});
}
}
public static void handler(Socket socket) {
try {
byte[] bytes = new byte[1024];
//通过socket获取输入流
InputStream inputStream = socket.getInputStream();
//循环的读取客户端发送的数据
while (true) {
int read = inputStream.read(bytes);
if(read != -1) {
System.out.println("接收到的请求是:" + new String(bytes, 0, read));
} else {
break;
}
// 响应给客户端
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println("服务端接收到请求了,响应时间:" + new Date());
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭连接
socket.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}NIO
Buffer
重要属性
常用子类
Channel
常用子类
Selector
线程模型
传统阻塞IO模型
Reactor模型
1. 单Reactor单线程

2. 单Reactor多线程

3. 主从Reactor多线程

Netty
Server端线程模型

Demo
核心组件
ServerBootstrap和Bootstrap
Channel、ChannelPipeline、ChannelHandlerContext和ChannelHandler
EventLoopGroup
一般流程
参考:
Last updated