`
shuofenglxy
  • 浏览: 194447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java IO 之 BIO

阅读更多

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相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...

    《初入JavaIO之门BIO、NIO、AIO实战练习》源码

    netty案例,netty4.1基础入门篇零《初入JavaIO之门BIO、NIO、AIO实战练习》 ...

    JAVA BIO AIO NIO测试代码

    对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码

    java基础之IO流

    ### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...

    一文彻底理解Java中IO的BIO、NIO、AIO

    在Java的发展历程中,IO模型经历了三个主要阶段:BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO),这三种模型各自有其特性和适用场景,下面将详细解析它们的工作原理和区别。 **1. BIO(阻塞...

    Java IO 体系.md

    Java IO 体系 - Java IO 体系 ...Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO

    Java 网络IO简介

    Java 网络IO简介: bio nio aio

    一站式学习Java网络编程 全面理解BIO:NIO:AIO1

    四、java.io 之字节流 字节流是 java.io 中的基本流类型,用于处理二进制数据。字节流包括 InputStream 和 OutputStream 两种,前者用于输入,后者用于输出。 DataInputStream 和 DataOutputStream 是 java.io 中...

    javaIO模型1

    Java IO模型1主要涉及到的是Java在处理网络数据交互时的不同方式。这里有五种主要的IO模型,它们分别是阻塞IO(BIO)、非阻塞IO、IO多路复用、信号量和异步IO(AIO)。理解这些模型的关键在于区分同步与异步以及阻塞...

    Java IO 模型常见面试题总结 · .pdf

    "Java IO 模型常见面试题总结" Java IO 模型是 Java 编程语言中的一种输入/输出机制,用于实现计算机系统与外部设备之间的通信过程。在计算机结构中,IO 描述了计算机系统与外部设备之间的通信过程。从应用程序的...

    scalaable java io

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,它在Java 1.4版本中被引入,替代了传统的Java IO(BIO)模型。NIO的核心在于非阻塞I/O和通道与缓冲区的使用,它提供了更高效、更灵活的数据读写方式...

    03-04-01-Java IO演进之路1

    Java IO 演进之路1 本章主要探讨了Java中的IO模型,包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),以及它们之间的区别和适用场景。此外,还深入讲解了阻塞与非阻塞、同步与异步的...

    Java IO相关基础知识简介

    Java支持三种不同的网络编程IO模式:BIO(阻塞IO)、NIO(非阻塞IO)和AIO(异步IO)。 BIO(Blocking IO)是同步阻塞模型,每个客户端连接都会创建一个新的线程来处理。这意味着如果有很多连接,可能会消耗大量...

    bio-nio-aio.zip

    本文将深入探讨Java中的三种IO模型:传统IO(BIO)、非阻塞IO(NIO)以及反应器模式(Reactor),并结合提供的压缩包文件中的示例代码进行解析。 一、传统IO(BIO) 传统的Java IO基于流(Stream)进行数据传输,它...

    Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析

    Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析 IO模型在计算机编程中扮演着至关重要的角色,特别是在网络通信中。Java提供了三种主要的IO模型:BIO(Blocking IO),NIO(Non-blocking IO),...

    Java_IO:你不知道的那些Java网络IO(BIO、NIO、AIO)

    本文将深入探讨Java中的三种网络IO模型:同步阻塞IO(BIO)、同步非阻塞IO(NIO)和异步非阻塞IO(AIO),以及它们在实际应用中的差异和应用场景。 1. **同步阻塞IO(BIO)** BIO是Java最初提供的IO模型,它基于...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    - **BIO(Blocking IO)**:这是Java早期提供的IO模型,特点是简单易用,但效率较低,适用于连接数量较少且对响应时间要求不高的场景。 - **NIO(Non-blocking IO)**:NIO提供了非阻塞的能力,通过选择器可以同时...

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

    Java 网络IO编程是 Java 编程语言中最重要的知识点之一,涉及到网络编程的各种技术和模型。本篇文章主要介绍了 Java 网络IO编程总结,包括 BIO、NIO 和 AIO 三种模型,并提供了完整的实例代码。 BIO(Blocking I/O...

    java-demo:java学习笔记,包含多线程,java IO流,java 阻塞IO,非阻塞IO,netty demo

    在这个"java-demo"项目中,我们可以深入学习Java技术,特别是关于多线程、IO流以及两种不同的IO模型——阻塞IO(BIO)和非阻塞IO。此外,还涉及到Netty框架的应用,这是一个高性能、异步事件驱动的网络应用框架,常...

Global site tag (gtag.js) - Google Analytics