JAVA BIO IO 模型概述

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【1月更文挑战第1天】JAVA BIO IO 模型概述

1.Java IO 模型:

Java支持三种网络编程模型:BIONIOAIO

  • BIO:同步并阻塞(传统阻塞型)

服务器实现模式为一个连接一个线程,及客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。

连接数目较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。

  • NIO:同步非阻塞

服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到有连接的I/O请求就进行处理。

NIO适用于连接数目较多且比较短(微操作)的架构,比如聊天服务器,弹幕系统,服务器间通信等,编程比较复杂。

  • AIO:异步非阻塞

异步非阻塞AIO引入异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程,它的特点是由操作系统完成之后才通知服务端程序启动线程去处理,一般适用于连接数量较多且连接事件较长的应用。

AIO使用场景:连接数目多且比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

2.BIO 模型概述:

IO流,是Java存储和读取数据的解决方案。输入(Input)输出(Output)的对象是针对于内存来确定的。

  • 输入(Input):从磁盘输入到内存。
  • 输出(Output):从内存输出到磁盘。

  • 纯文本文件:能用Windows打得开并且能读懂的就是纯文本文件。

I/O技术是非常实用的技术,用于处理设备之间的数据传输。读写文件、网络通讯等。Java程序中,对于数据的输入/输出操作以“流(Stream)”的方式进行。java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或者输出数据。

JavaIO流一共涉及40多个类,都是从以下4个抽象基类派生出来。由这4个派生出来的子类名称都是以其父类名作为子类名后缀。

(抽象基类)

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Write

JavaBIO相关的输入输出流分类大致如下:

分类

字节输入流

字节输出流

字符输入流

字符输出流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

FileWriter

访问数组

ByteArrayInputStream

ByteArrayOutputStream

CharArrayReader

CharArrayWriter

访问管道

PipedInputStream

PipedOutputStream

PipedReader

PipedWriter

访问字符串

StringReader

StringWrite

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

转换流



InputStreamReader

OutputStreamWriter

对象流

ObjectInputStream

ObjectOutputStream



抽象基类

FilterInputStream

FilterOutputStream

FilterReader

FilterWriter

打印流


PrintStream


PrintWriter

推回输入流

PushbackInputStream

PushbackReader

特殊流

DataInputStream

DataOutputStream



JavaBIO分类:

按照处理流的方式:

  • 节点流:如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流
  • 处理流:如果流封装的是其他的流对象,称之为处理流。处理流提供缓冲功能,提高读写效率

按照操作数据单位:

  • 字节流(8bit):传输图片、视频等文件时使用......
  • 字符流(16bit):传输文本文件时使用

按照数据流的流向:

  • 输入流:从磁盘、网络、键盘等读到内存,就是输入流
  • 输出流:内存写出写到磁盘、网络、屏幕等,都是输出流
相关文章
|
1月前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
网络协议与IO模型
|
1月前
|
安全 NoSQL Java
一文搞懂网络通信的基石✅IO模型与零拷贝
【10月更文挑战第1天】本文深入探讨了网络通信中的IO模型及其优化方法——零拷贝技术。首先介绍了IO模型的概念及五种常见类型:同步阻塞、同步非阻塞、多路复用、信号驱动和异步IO模型。文章详细分析了每种模型的特点和适用场景,特别是多路复用和异步IO在高并发场景中的优势。接着介绍了零拷贝技术,通过DMA直接进行数据传输,避免了多次CPU拷贝,进一步提升了效率。最后总结了各种模型的优缺点,并提供了相关的代码示例和资源链接。
一文搞懂网络通信的基石✅IO模型与零拷贝
|
21天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
14 1
|
1月前
|
开发者
什么是面向网络的IO模型?
【10月更文挑战第6天】什么是面向网络的IO模型?
20 3
|
1月前
|
数据挖掘 开发者
网络IO模型
【10月更文挑战第6天】网络IO模型
38 3
|
1月前
|
缓存 Java Linux
硬核图解网络IO模型!
硬核图解网络IO模型!
|
1月前
|
数据挖掘 开发者
网络IO模型如何选择?
网络IO模型如何选择?【10月更文挑战第5天】
19 2
|
1月前
|
数据库
同步IO模型是一种常见的编程模型
【10月更文挑战第5天】同步IO模型是一种常见的编程模型
18 2
|
2月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
基于套接字的IO模型
基于套接字的IO模型