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?