IO NIO 实现demo

目录

1.传统的io实现demo

2.nio实现demo


1.传统的io实现demo

public static void main(String[] args) throws IOException {
 ServerSocket server = new ServerSocket(8080);
 System.out.println("服务端已经开启");
 while (true) {
 Socket socket = server.accept();
 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 String buffer = null;
 while ((buffer = br.readLine()) != null && !buffer.equals("")) {
 System.out.println(buffer);
 }
 
 Charset charset = Charset.forName("UTF-8");
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), charset));
 bw.write("HTTP/1.1 200 OK\n");
 bw.write("Content-Type: text/html;charset=UTF-8\n\n");
 bw.write("BIO success");
 bw.flush();
 bw.close();
 br.close();
 socket.close();
 }
 }

这个demo可以用telnet或者浏览器去连接,但浏览器在连接的同时就发送了信息过去

首先,这是阻塞的,阻塞的地方有两个:一个是server.accept();另一个是br.readLine(),也就是说必须要连接进来,并且输出数据,否则就一直停在这里。换句话说就是,这个主线程只能处理这一个连接,在处理完这个连接之前,任何其他连接都别想进来。这就是阻塞。tomcat在新版本里已经完全不支持这种传统io模式了,之前的老版本里默认使用的是bio,因为tomcat使用的都是短连接,发送接收都很快,所以可以处理完这个连接后马上处理下一个连接,而且tomcat还使用了连接池,所以就可以支持更多连接的接入。但,这一切都没能阻止tomcat抛弃bio。(大家在启动tomcat时可以看到控制台的提示目前是使用nio还是bio连接)

2.nio实现demo

public class NIOServer {
 private Selector selector;
 
 public void init() throws IOException {
 // 创建一个选择器
 this.selector = Selector.open();
 // 使用通道计划,服务器
 ServerSocketChannel channel = ServerSocketChannel.open();
 // 这个通道非常高效,所以要非阻塞
 channel.config
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值