1. BIO基础概念解析
阻塞式I/O(Blocking I/O)是网络编程中最基础的I/O模型,也是大多数开发者最先接触的编程模式。当我们在Java中使用ServerSocket和Socket类进行网络通信时,实际上就是在使用BIO模型。
BIO的核心特点在于其同步阻塞的特性:
- 同步:I/O操作会等待数据准备好或传输完成
- 阻塞:调用线程在I/O操作完成前会被挂起
这种模型的工作方式就像在餐厅点单:服务员(线程)从你(客户端)那里拿到订单(请求)后,必须一直等到厨师(服务端)做好菜(响应),期间不能服务其他顾客。这种一对一的线程模型虽然简单直观,但在高并发场景下会面临严重性能问题。
注意:BIO模型在Java中主要通过java.net包中的Socket和ServerSocket类实现,这些类自JDK1.0就已存在,是Java网络编程的基石。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. BIO编程模型详解
2.1 服务端实现架构
一个典型的BIO服务端实现包含以下核心组件:
- ServerSocket:监听指定端口,接受客户端连接
- Socket:与客户端建立的连接通道
- 线程池:为每个连接分配处理线程
java复制// 基础BIO服务端代码框架
ServerSocket server = new ServerSocket(8080);
while(true) {
Socket client = server.accept(); // 阻塞等待连接
new Thread(() -> {
// 处理客户端请求
}).start();
}
这种一连接一线程的模型虽然简单,但存在明显缺陷:
- 线程创建销毁开销大
- 线程上下文切换成本高
- 线程数受限于操作系统资源
2.2 客户端实现要点
BIO客户端通常比服务端简单,主要关注点包括:
- 连接超时设置
- 读写超时控制
- 连接异常处理
java复制// BIO客户端示例
try(Socket socket = new Socket("127.0.0.1", 8080)) {
OutputStream out = socket.getOutputStream();
o
