(一)NIO与BIO

参考资源:[url]http://ifeve.com/java-nio-all/[/url]

一、简介

NIO: new IO , non-blocking IO , 非阻塞IO流
面向通道,操作缓冲区,双向传递
BIO: 传统的IO处理,阻塞式IO流
面向流操作字符、字节,具有方向性
二、

由于BIO在处理,高并发线程处理时,在以下情况容易出现线程阻塞
[list]
[*]connect,发起连接操作时
[*]accept,接收连接操作
[*]read,读取数据
[*]write,写入数据
[/list]

三、

1.正常情况下
[list]
[*]service服务器端,接收客户端数据
[*]client客户端,发送数据给服务器端
[/list]


// 服务器端,端口号:9999
public class ServiceDemo {

public static void main(String[] args) throws IOException {

ServerSocket ss = new ServerSocket();
ss.bind(new InetSocketAddress(9999));

Socket socket = ss.accept();
InputStream in = socket.getInputStream();
while(true){
System.out.println(in.read());
}
}

}




// 客户端,端口号:9999
public class ClientDemo {

public static void main(String[] args) throws IOException {

Socket socket = new Socket("127.0.0.1",9999);

OutputStream out = socket.getOutputStream();
while(true){
out.write("hello".getBytes());
}
}

}


先启动service端服务,否则,报错,连接不到,因为客户端找不到服务端的9999

windows+r --> cmd --> netstat -ano | find "9999"

查看服务端已启动,9999端口有TCP服务

控制台有数据输出

2.1 connect 阻塞

[list]
[*]service服务器端未启动
[*]client客户端一直发起请求连接,但始终连接不到
[/list]

2.2 accep 阻塞

[list]
[*]service服务器端启动,准备接受客户端的请求你
[*]client客户端未启动
[/list]

2.3 write 阻塞

[list]
[*]service服务器端启动,但不接收客户端传送的数据
[*]client客户端一直发起请求连接,传送数据
[/list]

数据在写入一段时间后,控制台不再打印信息,但客户端与服务端依然在运行

2.4 read 阻塞

[list]
[*]service服务器端启动,接收客户端传送的数据
[*]client客户端一直发起请求连接,但不发送数据
[/list]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值