设为首页 - 加入收藏 92站长网 (http://www.92zhanzhang.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2019 为什么 中国 苹果
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

BIO和NIO了解多少呢?一起从实践角度重新理解下吧

发布时间:2019-10-28 06:14 所属栏目:[优化] 来源:追逐仰望星空
导读:01 前言 这段时间自己在看一些Java中BIO和NIO之类的东西,看了很多博客,发现各种关于NIO的概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,自己对NIO还是一知半解的状态,所以这篇文章不会提到很多的概念,而是站在一个实践的角度,

?01 前言

这段时间自己在看一些Java中BIO和NIO之类的东西,看了很多博客,发现各种关于NIO的概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,自己对NIO还是一知半解的状态,所以这篇文章不会提到很多的概念,而是站在一个实践的角度,写一些我自己关于NIO的见解,站在实践过后的高度下再回去看概念,应该对概念会有一个更好的理解。

BIO和NIO了解多少呢?一起从实践角度重新理解下吧

02 实现一个简易单线程服务器

要讲明白BIO和NIO,首先我们应该自己实现一个简易的服务器,不用太复杂,单线程即可。

2.1 为什么使用单线程作为演示?

因为在单线程环境下可以很好地对比出BIO和NIO的一个区别,当然我也会演示在实际环境中BIO的所谓一个请求对应一个线程的状况。

2.2 服务端

  1. public?class?Server?{?
  2. ????public?static?void?main(String[]?args)?{?
  3. ????????byte[]?buffer?=?new?byte[1024];?
  4. ????????try?{?
  5. ????????????ServerSocket?serverSocket?=?new?ServerSocket(8080);?
  6. ????????????System.out.println("服务器已启动并监听8080端口");?
  7. ????????????while?(true)?{?
  8. ????????????????System.out.println();?
  9. ????????????????System.out.println("服务器正在等待连接...");?
  10. ????????????????Socket?socket?=?serverSocket.accept();?
  11. ????????????????System.out.println("服务器已接收到连接请求...");?
  12. ????????????????System.out.println();?
  13. ????????????????System.out.println("服务器正在等待数据...");?
  14. ????????????????socket.getInputStream().read(buffer);?
  15. ????????????????System.out.println("服务器已经接收到数据");?
  16. ????????????????System.out.println();?
  17. ????????????????String?content?=?new?String(buffer);?
  18. ????????????????System.out.println("接收到的数据:"?+?content);?
  19. ????????????}?
  20. ????????}?catch?(IOException?e)?{?
  21. ????????????//?TODO?Auto-generated?catch?block?
  22. ????????????e.printStackTrace();?
  23. ????????}?
  24. ????}?
  25. }?

2.3 客户端

  1. public?class?Consumer?{?
  2. ????public?static?void?main(String[]?args)?{?
  3. ????????try?{?
  4. ????????????Socket?socket?=?new?Socket("127.0.0.1",8080);?
  5. ????????????socket.getOutputStream().write("向服务器发数据".getBytes());?
  6. ????????????socket.close();?
  7. ????????}?catch?(IOException?e)?{?
  8. ????????????//?TODO?Auto-generated?catch?block?
  9. ????????????e.printStackTrace();?
  10. ????????}?
  11. ????}?
  12. }?

2.4 代码解析

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章