FEIQQ学习总结--BIO

zhy

发布于 2020.02.13 21:02 阅读 2366 评论 0

    BIO是大家最开始接触的网络流,下面我们用传统的BIO实现程序的功能。

 

软件原理:

 

    程序主要运用了mysql数据库技术进行数据处理,BIO技术实现客户端与服务器交互。BIO是基于字节流和字符流的IO,是阻塞式IO。

 

实现思路:

 

1. 绑定端口。

2. 在while(true)调用accpt方法等待客户端连接。

3. 创建线程处理客户端传来的信息。

 

       结构示意图:

 

 

代码实现:

try {
        //客户端绑定端口号
	server = new ServerSocket(port);
	System.out.println("服务器已启动,端口号:" + port);

	while (true) {

		// 等待客户端连接
		Socket socket = server.accept();// 阻塞方法

		// 创建线程处理信息
		Thread thread = new DoBusinessThread(socket);
                thread.start();

		}
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (server != null) {
			server.close();
		}
}

 

实现效果:

 

 

心得体会:

 

   NIO与BIO相比较,BIO是面向流的,并且BIO 的各种流都是阻塞的,当线程调用 read() 或 write () 时,该线程将被阻塞,处理读取的时候需要创建一个线程来单独处理一个IO操作,所需线程数量大。

    NIO是面向缓冲区的,是非阻塞的,NIO读取数据时,如果没有可用数据,线程就会去做其他事情;写入数据时,线程在完全写入之前不会一直等待它,线程可以在一时间做继续其他事情。

    NIO的Selector可以使一个线程管理多个通道,NIO的性能比BIO高很多。

    BIO更加适用于连接数目小,并且一次发送大量数据的场景。NIO适用于连接数目多,但是连接比较短的场景。