Java bio阻塞的示例代码,写上注释
时间: 2023-07-10 16:25:17 浏览: 106
下面是一个使用 Java BIO 进行网络通信的示例代码,并附有详细注释:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class BioServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
System.out.println("Server started, waiting for connections...");
// 等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("Connection established: " + socket.getInetAddress().getHostAddress());
// 获取输入输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 从输入流读取数据
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String request = new String(buffer, 0, length);
System.out.println("Received request: " + request);
// 发送响应数据到输出流
String response = "Hello, " + request;
outputStream.write(response.getBytes());
// 关闭连接
socket.close();
System.out.println("Connection closed.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在以上示例中,我们创建了一个简单的 Socket 服务器,等待客户端连接。当客户端连接成功后,我们通过 `getInputStream()` 和 `getOutputStream()` 分别获取输入输出流。接着,我们从输入流中读取数据,并将读取到的请求数据作为响应数据发送到输出流中。
在 `inputStream.read(buffer)` 方法中,如果没有数据可读,线程将会一直阻塞等待。在 `outputStream.write(response.getBytes())` 方法中,如果没有空闲的输出缓冲区,线程也会一直阻塞等待。
因此,这个示例代码体现了 Java BIO 的阻塞特性。在这个服务器中,当没有数据可读或者没有空闲的输出缓冲区时,线程将会一直阻塞等待,无法执行其他任务。
阅读全文