JAVA BIO IO 模型概述

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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):传输文本文件时使用

按照数据流的流向:

  • 输入流:从磁盘、网络、键盘等读到内存,就是输入流
  • 输出流:内存写出写到磁盘、网络、屏幕等,都是输出流
相关文章
|
20天前
|
IDE Oracle Java
java基础教程(1)-Java概述和相关名词解释
【4月更文挑战第1天】Java是1995年Sun Microsystems发布的高级编程语言,以其跨平台特性著名。它介于编译型和解释型语言之间,通过JVM实现“一次编写,到处运行”。Java有SE、EE和ME三个版本,分别针对标准、企业及嵌入式应用。JVM是Java虚拟机,确保代码在不同平台无需重编译。JRE是运行环境,而JDK包含开发工具。要安装Java开发环境,可从Oracle官网下载JDK,设置JAVA_HOME环境变量并添加到PATH。
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java
Java代码居然能画出抛物线模型
Java代码居然能画出抛物线模型
22 0
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3天前
|
缓存 Java 测试技术
Java基础BIO、NIO、AIO小结(上)
Java基础BIO、NIO、AIO小结
13 0
|
4天前
|
消息中间件 存储 Java
Java与Go的生产者消费者模型比较
【4月更文挑战第20天】
12 1
|
9天前
|
Java
Java基础教程(12)-Java中的IO流
【4月更文挑战第12天】Java IO涉及输入输出,包括从外部读取数据到内存(如文件、网络)和从内存输出到外部。流是信息传输的抽象,分为字节流和字符流。字节流处理二进制数据,如InputStream和OutputStream,而字符流处理Unicode字符,如Reader和Writer。File对象用于文件和目录操作,Path对象简化了路径处理。ZipInputStream和ZipOutputStream则用于读写zip文件。
|
25天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
55 2
|
1月前
|
Java
JAVA异常概述
JAVA异常概述
9 1