(一)NIO与BIO
程序员文章站
2022-03-02 15:28:42
...
参考资源:[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]
先启动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]
一、简介
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]
推荐阅读
-
一级域名与二级域名之间的区别
-
创业路上的一些经验分析与创业网赚项目的挖掘和选择
-
网站设计指南:怎样与千禧一代建立联系?
-
PHP的Yii框架使用中的一些错误解决方法与建议
-
现在作为一名自学前端开发的学生,对网站的前端与后台数据交互不懂,想学习ajax,很迷茫,不知从何学起?
-
php下将多个数组合并成一个数组的方法与实例代码
-
一根网线同时使用外网与内网
-
一加宣布与芬兰运营商 Elisa 合作,于第二季度推 5G 手机
-
分页技术原理与实现之分页的意义及方法(一)_MySQL
-
解决mysql时区与系统时区不一致问题。异常:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized o