参考资源:
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的对比,原有的 IO 是面向流的、阻塞的,NIO 则是面向块的、非阻塞的。
为了处理与外部世界的交互,Java提供了三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有优缺点,适用于不同场景。下面我们将深入探讨这三种I/O模型,并...
在Java中,Socket通信涉及三种不同的模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和Netty,这些都是实现高并发、高性能网络服务的重要手段。 **1. Socket基础** Socket,通常被称为套接字,是网络通信的...
与NIO不同,AIO是真正的异步I/O模型,它允许应用在发起读写操作后立即返回,而无需等待操作完成。操作系统会在数据准备好或写入完成时通过回调通知应用。这种模式进一步降低了线程的使用,提高了系统的效率。 关键...
本资源主要涵盖了三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和Netty,这些都是Java平台上的重要网络编程技术。下面将详细介绍这些概念及其在实际应用中的案例。 首先,BIO(阻塞I/O)是最...
在Java世界中,网络编程是不可或缺的一部分,而`BIO`( Blocking I/O)、`NIO`(Non-blocking I/O)以及`Netty`框架都是处理I/O操作的关键技术。本项目通过`JavaFX`创建了一个可视化的聊天室,演示了这三种I/O模型在...
压缩包内的`demo2_onlyBufferStream.txt`和`demo3_onlyBufferStream.txt`分别展示了BIO与NIO使用缓冲区进行IO操作的差异,通过对比可以更好地理解两者的性能和效率区别。 总结,Java IO的发展经历了从BIO到NIO的...
一、网络编程三剑客 - BIO、NIO、AIO BIO(Blocking I/O)是一种同步阻塞式 I/O 模式,服务器需要为每个客户端分配一个独立的线程来处理请求,导致服务器资源浪费。 NIO(Non-Blocking I/O)是一种异步非阻塞式 I/...
教程视频:网络编程高级(同步、异步、NIO、BIO、AIO)。
《NIO与Socket编程技术指南》是一本深入探讨Java NIO(New Input/Output)和Socket编程的专业书籍,由高洪岩撰写。本书主要针对Java开发者,旨在帮助他们理解和掌握这两种在开发网络应用中至关重要的技术。 Java ...
这里我们主要探讨三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这三种模型各有特点,适用于不同的场景。 BIO(阻塞I/O)是Java早期的标准I/O模型,它基于流...
与BIO不同,NIO允许一个线程处理多个连接,提高了服务器的并发能力。在NIO模式下,当读写操作没有准备好时,不会阻塞,而是返回一个状态值,从而降低了对系统资源的消耗。 **NIO示例:** ```java Selector ...
本文将深入探讨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 中的三种 I/O 模式,每种模式都有其特点和应用场景。下面对每种模式进行详细解释。 Java BIO Java BIO( Blocking I/O)是一种同步阻塞式的 I/O 模式,即服务器实现...
2. **资源消耗**:BIO需要为每个连接创建线程,而NIO只需一个或少数几个线程就能管理所有连接。 3. **复杂性**:NIO的编程模型相对复杂,需要理解和处理选择器、通道、缓冲区等概念,而BIO则相对简单。 **NIO的实际...
### BIO、NIO、AIO、Netty 面试题解析 #### 1. Java IO 基础概述 Java中的I/O操作是通过流(Stream)来实现的,所有的数据都通过流的方式被串行化处理。串行化的含义在于数据必须按顺序输入输出。Java中的IO操作...
对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码
与BIO不同,NIO的I/O操作是非阻塞的,即当数据未准备好时,调用read或write方法不会被阻塞,而是立即返回。通过选择器,一个线程可以同时监控多个通道,从而实现高并发的网络通信。NIO适用于连接数量大且并发高的...
Java作为一门广泛使用的编程语言,提供了多种I/O模型来处理数据的读写操作,其中包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景,理解它们的原理...