IO之我见(一)BIO
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相关推荐
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...
- 网络IO发展历程:BIO、NIO、多路复用器、epoll
网络侧IO,通过网络来通信(偏向内核方面) C10K问题:http://www.kegel.com/c10k.html#frameworks BIO NIO 多路复用器 什么是NIO 操作系统角度:N ...
- java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO
在网络编程中,接触到最多的就是利用Socket进行网络通信开发.在Java中主要是以下三种实现方式BIO.NIO.AIO. 关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完 ...
- java io nio pio_Netty之BIO(同步阻塞IO)、PIO(偽異步阻塞IO)、NIO(異步非阻塞IO)、AIO(異步非阻塞IO)、Netty...
學習書籍:Netty權威指南 多種IO方式的比較: 1.BIO(同步阻塞IO) 使用ServerSocket綁定IP地址和監聽端口,客戶端發起連接,通過三次握手建立連接,用socket來進行通信,通過 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_2整起~IO们那些事【包括五种IO模型:(BIO、NIO、IO多路复用、信号驱动、AIO);零拷贝、事件处理及并发等模型】
PART0.前情提要: 通常用户进程的一个完整的IO分为两个阶段(IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者!):[操作系统和驱动程序运行在内核空间,应用程序运行在用户空间, ...
- 【IO】Java 的 BIO、NIO 区别对比
1.面向流与面向缓冲 Java NIO 和 BIO 之间第一个最大的区别是,BIO 是面向流的,NIO 是面向缓冲区的. Java BIO 面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它 ...
- 【Java IO模式】Java BIO NIO AIO总结
一同步与异步阻塞与非阻塞 1同步与异步 2阻塞与非阻塞 3IO模式 二BIO 概念描述 特点 代码实现 三NIO 概念描述 特点 代码描述 四AIO 一.同步与异步.阻塞与非阻塞 1.同步与异步 同步 ...
- IO之 java中BIO NIO AIO原理、区别以及应用
在本篇文章中,我们主要介绍一下java中的BIO NIO AIO,重点是NIO 先说一下同步.异步.阻塞和非阻塞. 简单来讲,同步和异步是针对内核和应用程序之间的交互而言的:阻塞和非阻塞其实是针对进程 ...
- (转载)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解 ...
最新文章
- android用java_原来android不是只能用java写软件
- 猖狂!微软、思科源码惨遭黑客 100 万美元打包出售
- Python3 websocket通信
- Nginx配置段(3)
- 无线信标功能调试-2021-3-9-HALL检测与主控接口
- Kubernetes — 基于层级命名空间的多租户隔离
- Windows XP Embedded 上手指南
- Spring Cloud(六) 服务网关GateWay 入门
- java反序列化漏洞实战
- 分布式系统原理 之7 基于MVCC的分布式事务
- 指针作为函数参数引用数组的任意元素
- 正则表达式||grep的使用
- ae插件Particle Projection for Mac(AE粒子投影插件)
- 核销规则配置好之后 验证核销规则和本地测试过程
- 《『若水新闻』客户端开发教程》——05.设计新闻列表UI
- 搭建Struts2开发环境
- java.io.serializable_java.io.Serializable浅析 | 学步园
- 深度学习笔记_各种神经网络结构对比(ImageNet竞赛中:AlexNet/VGG/GoogleNet/ResNet/SENet)
- 微信小程序标题自定义、左上角返回首页小房子
- Gibberish 本地化插件学习
热门文章
- 尚医通-医院列表接口-等级接口-功能测试(二十二)
- 1H412000机电工程专业技术——1H412020起重技术
- Mysql主从复制配置实例
- 填谷式无源pfc电路_LED无频闪技术之被动PFC(填谷电路)
- 蓝桥杯第十三届国赛PythonB组题解
- 云堡垒机的作用_云堡垒机的主要功能和使用价值介绍
- 你知道可以配音的软件有哪些?推荐几款文字转语音配音软件
- 50首音乐,喝茶时听一听,身心舒畅
- 毕业设计 油罐检测爬壁机器人结构设计(说明书+CAD图纸+开题报告+任务书+外文翻译+英文文献)
- 基于java靓车汽车销售网站计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署