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适用于连接数目多,但是连接比较短的场景。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}