阻塞IO(Blocking IO)是一种IO操作模式。在这种模式下,当一个IO操作(如读、写)执行时,如果不能立即完成操作,程序会暂停执行,直到操作完成。简单来说,阻塞IO会使调用线程等待IO操作的完成,无法继续处理其他任务。
下面是一个使用Java进行阻塞IO操作的简单示例。这段代码展示了如何使用ServerSocket
和Socket
进行阻塞IO操作。
代码解读复制代码public class TCPServer {
public static void main(String[] args) throws IOException {
System.out.println("服务的启动...");
System.out.println("开始监听9999端口");
ServerSocket ss = new ServerSocket(9999);
while (true){
// 等待客户端连接
Socket accept = ss.accept();
// 处理客户端请求
InputStream is = accept.getInputStream();
byte[] b = new byte[10];
is.read(b);
String clientIP = accept.getInetAddress().getHostAddress();
System.out.println(clientIP + "说:" + new String(b));
// 回复客户端消息
OutputStream os = accept.getOutputStream();
os.write("Echo".getBytes());
// 关闭
accept.close();
}
}
}
代码解读复制代码public class TCPClient {
public static void main(String[] args) throws IOException {
while (true){
//创建socket对象
Socket s = new Socket("127.0.0.1", 9999);
OutputStream os = s.getOutputStream();
System.out.println("请输入:");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
os.write(input.getBytes());
//获得服务端的响应
byte[] b = new byte[1024];
int len = s.getInputStream().read(b);
System.out.println("服务端回复:" + new String(b, 0, len));
//关闭连接
s.close();
}
}
}
TCPServer
。服务端会在9999端口上监听客户端连接。TCPClient
。客户端会连接到服务端,并可以输入消息发送到服务端。阻塞IO适用于简单的网络应用,但在高并发场景下效率较低,因为每个连接会占用一个线程,可能导致线程资源耗尽。为了解决高并发问题,可以使用非阻塞IO(如NIO)或异步IO技术。