BIO 阻塞式IO.一个简单的TCP+BIO demo如下:
Server端:
package tcpbio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[]args) throws IOException, InterruptedException{
int PORT = 11111;
int msgcount =0;
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Server starts,server is listenning to 11111 ");
Socket socket = serverSocket.accept();
BufferedReader msgFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
while(true){
String clientInput = msgFromClient.readLine();
if(clientInput == null ){
Thread.sleep(1000);
continue;
}
if("over".equalsIgnoreCase(clientInput.trim())){
msgFromClient.close();
out.close();
serverSocket.close();
System.out.println("Server has been shutdown!");
System.exit(0);
}
else{
//模拟耗时的业务操作
Thread.sleep(3000);
out.println("the server syas "+clientInput);
out.flush();
msgcount++;
Thread.sleep(100);
}
}
}
}
Client端:
package tcpbio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
public static void main(String[]args) throws UnknownHostException, IOException{
String HOST_ADDRESS = "127.0.0.1";
int PORT = 11111;
//建立与服务器端通信套接字
Socket socket = new Socket(HOST_ADDRESS,PORT);
//获取服务端返回信息
BufferedReader msgFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//建立写入流 向socket写入输入
PrintWriter out = new PrintWriter(socket.getOutputStream());
System.out.println("Client start");
while(true){
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
long start = System.currentTimeMillis();
//读取输入
String clientInput = input.readLine();
//匹配退出
if(clientInput ==null ||clientInput.equalsIgnoreCase("over")){
clientInput = "over";//写入退出命令 以令服务器关闭监听的serverSocket
out.println(clientInput);
out.flush();
out.close();
input.close();
socket.close();
//tag = false;
break;
}
//将输入写入
out.println(clientInput);
out.flush();
String responseMsg = msgFromServer.readLine();
long end = System.currentTimeMillis();
System.out.println("Recieving msg from Server:"+responseMsg);
System.out.println("This process totally costs: "+(end-start) +" milliSeconds");
}
}
}
说明:这里通过简单的server端工作线程在处理得到的输入时sleep 3秒钟来模仿复杂的业务耗时操作,这里通过client端的计时可以发现,client端的workThread一直要等到server端的响应结果,这样的话,十分耗时,资源利用率太低。但它的好处在于,当服务端有响应返回客户端的时候能继续进行业务操作。这种IO方式适合于CPU等资源非常充分并且这个业务请求时唯一的业务操作的情况。因为这种情况下,即使你切走cpu也没有其他事情可做。
分享到:
相关推荐
Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...
netty案例,netty4.1基础入门篇零《初入JavaIO之门BIO、NIO、AIO实战练习》 ...
对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码
### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...
在Java的发展历程中,IO模型经历了三个主要阶段:BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO),这三种模型各自有其特性和适用场景,下面将详细解析它们的工作原理和区别。 **1. BIO(阻塞...
Java IO 体系 - Java IO 体系 ...Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO
Java 网络IO简介: bio nio aio
四、java.io 之字节流 字节流是 java.io 中的基本流类型,用于处理二进制数据。字节流包括 InputStream 和 OutputStream 两种,前者用于输入,后者用于输出。 DataInputStream 和 DataOutputStream 是 java.io 中...
Java IO模型1主要涉及到的是Java在处理网络数据交互时的不同方式。这里有五种主要的IO模型,它们分别是阻塞IO(BIO)、非阻塞IO、IO多路复用、信号量和异步IO(AIO)。理解这些模型的关键在于区分同步与异步以及阻塞...
"Java IO 模型常见面试题总结" Java IO 模型是 Java 编程语言中的一种输入/输出机制,用于实现计算机系统与外部设备之间的通信过程。在计算机结构中,IO 描述了计算机系统与外部设备之间的通信过程。从应用程序的...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,它在Java 1.4版本中被引入,替代了传统的Java IO(BIO)模型。NIO的核心在于非阻塞I/O和通道与缓冲区的使用,它提供了更高效、更灵活的数据读写方式...
Java IO 演进之路1 本章主要探讨了Java中的IO模型,包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),以及它们之间的区别和适用场景。此外,还深入讲解了阻塞与非阻塞、同步与异步的...
Java支持三种不同的网络编程IO模式:BIO(阻塞IO)、NIO(非阻塞IO)和AIO(异步IO)。 BIO(Blocking IO)是同步阻塞模型,每个客户端连接都会创建一个新的线程来处理。这意味着如果有很多连接,可能会消耗大量...
本文将深入探讨Java中的三种IO模型:传统IO(BIO)、非阻塞IO(NIO)以及反应器模式(Reactor),并结合提供的压缩包文件中的示例代码进行解析。 一、传统IO(BIO) 传统的Java IO基于流(Stream)进行数据传输,它...
Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析 IO模型在计算机编程中扮演着至关重要的角色,特别是在网络通信中。Java提供了三种主要的IO模型:BIO(Blocking IO),NIO(Non-blocking IO),...
本文将深入探讨Java中的三种网络IO模型:同步阻塞IO(BIO)、同步非阻塞IO(NIO)和异步非阻塞IO(AIO),以及它们在实际应用中的差异和应用场景。 1. **同步阻塞IO(BIO)** BIO是Java最初提供的IO模型,它基于...
- **BIO(Blocking IO)**:这是Java早期提供的IO模型,特点是简单易用,但效率较低,适用于连接数量较少且对响应时间要求不高的场景。 - **NIO(Non-blocking IO)**:NIO提供了非阻塞的能力,通过选择器可以同时...
Java 网络IO编程是 Java 编程语言中最重要的知识点之一,涉及到网络编程的各种技术和模型。本篇文章主要介绍了 Java 网络IO编程总结,包括 BIO、NIO 和 AIO 三种模型,并提供了完整的实例代码。 BIO(Blocking I/O...
在这个"java-demo"项目中,我们可以深入学习Java技术,特别是关于多线程、IO流以及两种不同的IO模型——阻塞IO(BIO)和非阻塞IO。此外,还涉及到Netty框架的应用,这是一个高性能、异步事件驱动的网络应用框架,常...