BIO、NIO、AIO
BIO
传统的IO方式,会在socket.accept()方法和read()方法发生阻塞。 第一次阻塞等待客户端的连接,第二次阻塞等待客户端的IO操作,这样会导致cpu一直在那等待,造成资源的浪费。 传统的socket通信方式:
client handler
package Demo4;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
/**
* @Author: small_double
* @Date: 2019/9/29 下午4:14
* client 处理器
*/
public class BioClientHandler implements Runnable {
private Socket socket;
public BioClientHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
InputStream inputStream = null;
try {
inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int count = 0;
while ((count = inputStream.read(bytes)) != -1) {
System.out.println("\n收到服务器端的数据:" +
new String(bytes, 0, count, "utf-8"));
System.out.print("请输入要发送的消息:");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}Bio 客户端
服务端
bio server handler
bio方式的缺点:浪费cpu资源,同步阻塞方式。
NIO
nio与bio相比解决了bio两次阻塞的问题(解阻塞)
NIO client
AIO
异步非阻塞 IO
Last updated
Was this helpful?