`

(一)NIO与BIO

    博客分类:
  • NIO
NIO 
阅读更多
参考资源:http://ifeve.com/java-nio-all/

一、简介

NIO: new IO , non-blocking IO , 非阻塞IO流
     面向通道,操作缓冲区,双向传递
BIO: 传统的IO处理,阻塞式IO流
     面向流操作字符、字节,具有方向性
二、

由于BIO在处理,高并发线程处理时,在以下情况容易出现线程阻塞
  • connect,发起连接操作时
  • accept,接收连接操作
  • read,读取数据
  • write,写入数据


三、

1.正常情况下
  • service服务器端,接收客户端数据
  • client客户端,发送数据给服务器端


// 服务器端,端口号:9999
public class ServiceDemo {

	public static void main(String[] args) throws IOException {

		ServerSocket ss = new ServerSocket();
		ss.bind(new InetSocketAddress(9999));
		
		Socket socket = ss.accept();
		InputStream in = socket.getInputStream();
		while(true){
			System.out.println(in.read());
		}
	}

}



// 客户端,端口号:9999
public class ClientDemo {

	public static void main(String[] args) throws IOException {

		Socket socket = new Socket("127.0.0.1",9999);
		
		OutputStream out = socket.getOutputStream();
		while(true){
			out.write("hello".getBytes());
		}
	}

}


先启动service端服务,否则,报错,连接不到,因为客户端找不到服务端的9999

windows+r --> cmd --> netstat -ano | find "9999"

查看服务端已启动,9999端口有TCP服务

控制台有数据输出

2.1 connect 阻塞

  • service服务器端未启动
  • client客户端一直发起请求连接,但始终连接不到


2.2 accep 阻塞

  • service服务器端启动,准备接受客户端的请求你
  • client客户端未启动


2.3 write 阻塞

  • service服务器端启动,但不接收客户端传送的数据
  • client客户端一直发起请求连接,传送数据


数据在写入一段时间后,控制台不再打印信息,但客户端与服务端依然在运行

2.4 read 阻塞

  • service服务器端启动,接收客户端传送的数据
  • client客户端一直发起请求连接,但不发送数据


分享到:
评论

相关推荐

    NIO、BIO介绍与对比

    详细介绍NIO以及和BIO的对比,原有的 IO 是面向流的、阻塞的,NIO 则是面向块的、非阻塞的。

    bio nio aio demo

    为了处理与外部世界的交互,Java提供了三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有优缺点,适用于不同场景。下面我们将深入探讨这三种I/O模型,并...

    Socket 之 BIO、NIO、Netty 简单实现

    在Java中,Socket通信涉及三种不同的模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和Netty,这些都是实现高并发、高性能网络服务的重要手段。 **1. Socket基础** Socket,通常被称为套接字,是网络通信的...

    基于java的BIO、NIO、AIO通讯模型代码实现

    与NIO不同,AIO是真正的异步I/O模型,它允许应用在发起读写操作后立即返回,而无需等待操作完成。操作系统会在数据准备好或写入完成时通过回调通知应用。这种模式进一步降低了线程的使用,提高了系统的效率。 关键...

    nio、bio、netty的一些案例

    本资源主要涵盖了三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和Netty,这些都是Java平台上的重要网络编程技术。下面将详细介绍这些概念及其在实际应用中的案例。 首先,BIO(阻塞I/O)是最...

    nio+bio+netty+fx.zip

    在Java世界中,网络编程是不可或缺的一部分,而`BIO`( Blocking I/O)、`NIO`(Non-blocking I/O)以及`Netty`框架都是处理I/O操作的关键技术。本项目通过`JavaFX`创建了一个可视化的聊天室,演示了这三种I/O模型在...

    bio-nio-aio.zip

    压缩包内的`demo2_onlyBufferStream.txt`和`demo3_onlyBufferStream.txt`分别展示了BIO与NIO使用缓冲区进行IO操作的差异,通过对比可以更好地理解两者的性能和效率区别。 总结,Java IO的发展经历了从BIO到NIO的...

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

    一、网络编程三剑客 - BIO、NIO、AIO BIO(Blocking I/O)是一种同步阻塞式 I/O 模式,服务器需要为每个客户端分配一个独立的线程来处理请求,导致服务器资源浪费。 NIO(Non-Blocking I/O)是一种异步非阻塞式 I/...

    25 网络编程高级(同步、异步、NIO、BIO、AIO)

    教程视频:网络编程高级(同步、异步、NIO、BIO、AIO)。

    《NIO与Socket编程技术指南》_高洪岩

    《NIO与Socket编程技术指南》是一本深入探讨Java NIO(New Input/Output)和Socket编程的专业书籍,由高洪岩撰写。本书主要针对Java开发者,旨在帮助他们理解和掌握这两种在开发网络应用中至关重要的技术。 Java ...

    BIO,NIO,AIO实现的demo

    这里我们主要探讨三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这三种模型各有特点,适用于不同的场景。 BIO(阻塞I/O)是Java早期的标准I/O模型,它基于流...

    java socket Bio Nio example

    与BIO不同,NIO允许一个线程处理多个连接,提高了服务器的并发能力。在NIO模式下,当读写操作没有准备好时,不会阻塞,而是返回一个状态值,从而降低了对系统资源的消耗。 **NIO示例:** ```java Selector ...

    BIO、NIO、AIO、Netty 、TCP全网最全解析!Netty中提供了哪些线程模型?

    本文将深入探讨BIO( Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O)以及Netty框架中的线程模型,并与TCP网络协议相结合,为您提供全网最全面的解析。 首先,让我们从基础开始,了解这些I/O...

    java BIO NIO AIO

    Java BIO NIO AIO Java BIO、NIO、AIO是 Java 中的三种 I/O 模式,每种模式都有其特点和应用场景。下面对每种模式进行详细解释。 Java BIO Java BIO( Blocking I/O)是一种同步阻塞式的 I/O 模式,即服务器实现...

    传统BIO编程模型及NIO编程模型源码

    2. **资源消耗**:BIO需要为每个连接创建线程,而NIO只需一个或少数几个线程就能管理所有连接。 3. **复杂性**:NIO的编程模型相对复杂,需要理解和处理选择器、通道、缓冲区等概念,而BIO则相对简单。 **NIO的实际...

    BIO,NIO,AIO,Netty面试题.pdf

    ### BIO、NIO、AIO、Netty 面试题解析 #### 1. Java IO 基础概述 Java中的I/O操作是通过流(Stream)来实现的,所有的数据都通过流的方式被串行化处理。串行化的含义在于数据必须按顺序输入输出。Java中的IO操作...

    JAVA BIO AIO NIO测试代码

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

    aio_bio_nio.rar

    与BIO不同,NIO的I/O操作是非阻塞的,即当数据未准备好时,调用read或write方法不会被阻塞,而是立即返回。通过选择器,一个线程可以同时监控多个通道,从而实现高并发的网络通信。NIO适用于连接数量大且并发高的...

    BIO、NIO、AIO

    Java作为一门广泛使用的编程语言,提供了多种I/O模型来处理数据的读写操作,其中包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景,理解它们的原理...

Global site tag (gtag.js) - Google Analytics