Java BIO基本介绍
Java BIO工作机制
对BIO编程流程的处理
JavaBIO应用实例
package com.zj.bio;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/6/2 0002 12:51
*
* 使用线程池处理BIO模型
*
*
*
*/
public class BIOServer {
public static void main(String[] args) throws IOException {
//线程池机制
//思路:
//1、创建线程池
//2、如果有客户端连接,就创建一个线程与之通讯(单独编写一个方法)
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
//创建ServerSocket
ServerSocket serverSocket = new ServerSocket(6666);
System.out.println("服务器启动了");
while (true){
//监听,等待客户端连接这里会阻塞
final Socket socket =serverSocket.accept();
System.out.println("一个客户端连接上了");
//就创建一个线程与值通信(从线程池中捞取一个线程)
newCachedThreadPool.execute(new Runnable() {
public void run() {//重写run方法,可以和客户端通信
handler(socket);
}
});
}
}
//编写一个handler和客户端通信
public static void handler(Socket socket) {
byte[] bytes = new byte[1024];
//通过socket获取输入流(客户端向服务daunt发送的数据)
try {
InputStream inputStream = socket.getInputStream();
//循环读取客户端发送过来的数据
while(true){
//会阻塞(读已经连接的线程会阻塞在这里)
int read= inputStream.read(bytes);
if(read!=-1){
System.out.println(new String(bytes,0,read));//输出客户端发送的数据
}else{
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
System.out.println("关闭与Sockey连接");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Java BIO问题分析