java BIO就是传统的java io变成

BIO(Blocking IO)同步阻塞,服务端实现模式为一个连接,一个线程。客户端有连接请求时,服务端就需要启动一个线程进行连接,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池来改善。

服务端线程代码

package com.chen.three;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;public class ServerThreadReader extends Thread{private Socket socket;public ServerThreadReader(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String msg ;while ((msg=bufferedReader.readLine())!=null){System.out.println("服务端收到"+msg);}} catch (IOException e) {e.printStackTrace();}}
}

Server端代码

package com.chen.three;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/*** 目标 服务端可以接收多个客户端的Socket通信请求* 思路:服务端接收到一个客户端请求对象之后,都交给一个独立的线程来处理客户端的数据交互**/
public class Server {public static void main(String[] args) throws IOException {//1.注册端口ServerSocket serverSocket = new ServerSocket(9999);//2定义一个死循环,负责不断接收客户端的Socket连接请求while (true){Socket accept = serverSocket.accept();//3.创建一个独立的线程来处理客户端的socket的通信请求new ServerThreadReader(accept).start();}}
}

客户端代码,记得启动两次来代表两个客户端哦

package com.chen.three;import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) {try {Socket socket = new Socket("127.0.0.7",9999);OutputStream outputStream = socket.getOutputStream();PrintStream ps = new PrintStream(outputStream);Scanner scanner = new Scanner(System.in);while (true){System.out.print("请说");String s = scanner.nextLine();ps.println(s);ps.flush();}} catch (IOException e) {e.printStackTrace();}}}

优缺点:

1.服务端想接收多个客户端,都需要创建一个线程,线程的竞争和频繁的切换上下文影响性能

2.每个线程都会占用栈空间和CPU资源

3.并不是每个Socket都进行IO操作,无意义的线程处理

4.客户端的并发访问增加时,服务端将呈现1:1的线程开销,访问量越大,系统将会发生线程栈溢出,线程创建失败,导致进程死机。

IO之我见(一)BIO相关推荐

  1. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...

  2. 网络IO发展历程:BIO、NIO、多路复用器、epoll

    网络侧IO,通过网络来通信(偏向内核方面) C10K问题:http://www.kegel.com/c10k.html#frameworks BIO NIO 多路复用器 什么是NIO 操作系统角度:N ...

  3. java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO

    在网络编程中,接触到最多的就是利用Socket进行网络通信开发.在Java中主要是以下三种实现方式BIO.NIO.AIO. 关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完 ...

  4. java io nio pio_Netty之BIO(同步阻塞IO)、PIO(偽異步阻塞IO)、NIO(異步非阻塞IO)、AIO(異步非阻塞IO)、Netty...

    學習書籍:Netty權威指南 多種IO方式的比較: 1.BIO(同步阻塞IO) 使用ServerSocket綁定IP地址和監聽端口,客戶端發起連接,通過三次握手建立連接,用socket來進行通信,通過 ...

  5. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_2整起~IO们那些事【包括五种IO模型:(BIO、NIO、IO多路复用、信号驱动、AIO);零拷贝、事件处理及并发等模型】

    PART0.前情提要: 通常用户进程的一个完整的IO分为两个阶段(IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者!):[操作系统和驱动程序运行在内核空间,应用程序运行在用户空间, ...

  6. 【IO】Java 的 BIO、NIO 区别对比

    1.面向流与面向缓冲 Java NIO 和 BIO 之间第一个最大的区别是,BIO 是面向流的,NIO 是面向缓冲区的. Java BIO 面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它 ...

  7. 【Java IO模式】Java BIO NIO AIO总结

    一同步与异步阻塞与非阻塞 1同步与异步 2阻塞与非阻塞 3IO模式 二BIO 概念描述 特点 代码实现 三NIO 概念描述 特点 代码描述 四AIO 一.同步与异步.阻塞与非阻塞 1.同步与异步 同步 ...

  8. IO之 java中BIO NIO AIO原理、区别以及应用

    在本篇文章中,我们主要介绍一下java中的BIO NIO AIO,重点是NIO 先说一下同步.异步.阻塞和非阻塞. 简单来讲,同步和异步是针对内核和应用程序之间的交互而言的:阻塞和非阻塞其实是针对进程 ...

  9. (转载)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解 ...

最新文章

  1. android用java_原来android不是只能用java写软件
  2. 猖狂!微软、思科源码惨遭黑客 100 万美元打包出售
  3. Python3 websocket通信
  4. Nginx配置段(3)
  5. 无线信标功能调试-2021-3-9-HALL检测与主控接口
  6. Kubernetes — 基于层级命名空间的多租户隔离
  7. Windows XP Embedded 上手指南
  8. Spring Cloud(六) 服务网关GateWay 入门
  9. java反序列化漏洞实战
  10. 分布式系统原理 之7 基于MVCC的分布式事务
  11. 指针作为函数参数引用数组的任意元素
  12. 正则表达式||grep的使用
  13. ae插件Particle Projection for Mac(AE粒子投影插件)
  14. 核销规则配置好之后 验证核销规则和本地测试过程
  15. 《『若水新闻』客户端开发教程》——05.设计新闻列表UI
  16. 搭建Struts2开发环境
  17. java.io.serializable_java.io.Serializable浅析 | 学步园
  18. 深度学习笔记_各种神经网络结构对比(ImageNet竞赛中:AlexNet/VGG/GoogleNet/ResNet/SENet)
  19. 微信小程序标题自定义、左上角返回首页小房子
  20. Gibberish 本地化插件学习

热门文章

  1. 尚医通-医院列表接口-等级接口-功能测试(二十二)
  2. 1H412000机电工程专业技术——1H412020起重技术
  3. Mysql主从复制配置实例
  4. 填谷式无源pfc电路_LED无频闪技术之被动PFC(填谷电路)
  5. 蓝桥杯第十三届国赛PythonB组题解
  6. 云堡垒机的作用_云堡垒机的主要功能和使用价值介绍
  7. 你知道可以配音的软件有哪些?推荐几款文字转语音配音软件
  8. 50首音乐,喝茶时听一听,身心舒畅
  9. 毕业设计 油罐检测爬壁机器人结构设计(说明书+CAD图纸+开题报告+任务书+外文翻译+英文文献)
  10. 基于java靓车汽车销售网站计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署