JAVA BIO IO 模型概述

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【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):传输文本文件时使用

按照数据流的流向:

  • 输入流:从磁盘、网络、键盘等读到内存,就是输入流
  • 输出流:内存写出写到磁盘、网络、屏幕等,都是输出流
目录
打赏
0
0
0
0
145
分享
相关文章
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
|
3月前
|
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
72 10
|
4月前
|
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
45 1
|
4月前
|
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
91 0
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
136 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
硬核图解网络IO模型!
硬核图解网络IO模型!
|
4月前
|
什么是面向网络的IO模型?
【10月更文挑战第6天】什么是面向网络的IO模型?
35 3
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
56 14

云原生

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等