AI
推荐
模板社区
专题
登录
免费注册
首页
思维导图
详情
pdai.tech个人总结整理
2024-09-16 18:21:07
0
举报
分享方式
仅支持查看
AI智能生成
读pdai.tech网站的笔记,自己用
Java
模板推荐
作者其他创作
大纲/内容
全站基础知识问题汇总
上
4、JavaIO
基础IO
1、如何从数据传输理解IO流?
分两类:可将IO流分两类,字节流和字符流
字节字符转换:
这张图展示了 Java 中的字节流和字符流的概念,以及它们如何与输入源和输出接收器进行交互。以下是对图中各部分的详细解释:<br><br>### 1. 字符流与字节流<br>- **字符流(Character Streams)**:<br> - 使用 `Reader` 和 `Writer` 类处理字符数据。<br> - 每个字符占用 16 位(`char`),通常用于处理文本数据。<br> - 适合于读取和写入字符数据,例如文本文件。<br><br>- **字节流(Byte Streams)**:<br> - 使用 `InputStream` 和 `OutputStream` 类处理字节数据。<br> - 每个字节占用 8 位(`byte`),适合于处理二进制数据(如图片、音频等)。<br><br>### 2. 内部数据格式<br>- **文本格式(char)**:使用 UCS-2 编码。<br>- **其他数据格式**:包括整数(int)、浮点数(float)、双精度数(double)等。<br><br>### 3. 输入源与输出接收器<br>- **输入源(Input Source)**:<br> - 可以是键盘、文件、网络或其他程序。<br> - 数据通过输入流读取。<br><br>- **输出接收器(Output Sink)**:<br> - 可以是控制台、文件、网络或其他程序。<br> - 数据通过输出流写入。<br><br>### 4. 外部数据格式<br>- **文本的多种编码**:支持多种文本编码格式,如:<br> - US-ASCII<br> - ISO-8859-1<br> - UCS-2<br> - UTF-8<br> - UTF-16<br> - UTF-16BE<br> - UTF-16LE<br>- **二进制数据**:原始字节数据。<br><br>### 总结<br>这张图形象地展示了 Java 中如何处理字符和字节流,强调了两者的区别以及它们在输入和输出操作中的作用。字符流主要用于处理文本,而字节流则适合处理任意类型的二进制数据。理解这些概念对于进行文件操作和网络通信等任务非常重要。
字节流byte:就是读取单个字节,用来处理二进制文件(图片、音频、视频文件)
InputStream
ByteArrayInputStream
PipedInputStream
FilterInputStream
BufferedInputStream
DataInputStream
FileInputStream
DataInputStream
OutputStream
ByteArrayOutputStream
PipedOutputStream
FiterOutputStream
BufferedOutputStream
DataOutputStream
PrintStream
FilterOutputStream
ObjectOutputStream
字符流character:读取单个字符,处理文本文件<br> 一个字符根据编码格式的不同,对应的字节数也不同,UTF-8编码中文汉字是3个字节,GBK编码的中文汉字是2个字节<br> 可以将文本文件看做特殊的二进制文件,使用了某种编码,人可以阅读的
Reader
CharArrayReader
PipedReader
FilterReader
BufferedReader
InputStreamReader
FileReader
Writer
CharArrayWriter
PipedWriter
FilterWriter
BufferedWriter
OutputStreamWriter
FileWriter
PrintWriter
2、如何从数据操作上理解数据流?<br>从数据来源或者是操作对象的角度来看,IO类可以分为
文件(file)
FilterInputStream
FileOutputtream
FileReader
FilrWriter
数组[]
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
管道操作
PipedInputStream
PipedOutputStream
PipedReader
PipedWriter
基本数据类型
DataInputerStream
DataOutputStream
缓冲操作
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
打印
PrintStream
PirntWrite
对象序列化反序列化
ObjectInputStream
ObjectOutputStream
转换
InputStreamReader
OutputStreamWriter
3、IO设计上使用了什么设计模式?
装饰者设计模式:就是把装饰者套在被装饰者之上<br>
FileInputStream fileInputStream = new FileInputStream(filePath);<br>BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);<br>
4、五种IO模型
什么是阻塞?什么是同步?
阻塞IO和非阻塞IO
这两个是程序级别的问题,当操作系统没有IO资源的时候,非阻塞IO就一直轮训,直到有了IO资源为止<br>而阻塞IO则是陷入等待<br>等待的IO何时会被唤醒?<br>1、别的IO操作完成时当前的会被唤醒2、若设置了超时时间,那么等待时间超时了也会被唤醒3、被其他线程或者尾部事件中断的时候也会被唤醒<br>等待的IO如何被唤醒?<br>唤醒机制通常依赖于操作系统和底层IO,1、内核通知:当IO操作完成的时候内核会将相关事件标记为可用2、调度器唤醒:等待超时的IO,会被操作系统的调度器从等待队列转移到就绪队列中,准备再次调度该线程3、上下文切换:当cup空闲时调度器会选择该线程执行,对之前未执行完的线程进行上下文的记录
同步IO和非同步IO
是操作系统级别的概念<br>当IO资源不足时,同步IO进行等待,直到IO资源足够后在进行执行;非同步IO的程序则不用等待,返回一个标记(让操作系统直到以后返回的数据该往哪里通知),当IO准备好以后再用事件机制返回给程序
什么是Linux的IO模型?
是指Linux系统中处理IO操作的不同方式方法<br>网络IO操作的本质是socket的读取,socket在Linux系统中被抽象为流,IO可以理解为对流的操作<br>
1. 阻塞 IO(Blocking IO)<br>描述:在阻塞 IO 模型中,当应用程序发起一个 IO 操作时,如果数据不可用,调用会被阻塞,直到数据准备好。<br>特点:<br>简单易用,编程模型直观。<br>线程在等待 IO 操作完成时会被挂起,无法执行其他任务。<br>适用场景:适合简单的应用程序或对性能要求不高的场景。<br>2. 非阻塞 IO(Non-blocking IO)<br>描述:在非阻塞 IO 模型中,IO 操作立即返回,如果数据不可用,返回一个错误而不是阻塞。<br>特点:<br>应用程序可以在等待 IO 操作的同时执行其他任务。<br>需要使用循环(polling)来检查数据是否可用。<br>适用场景:适合需要高并发和响应性的应用程序,如网络服务器。<br>3. IO 多路复用(IO Multiplexing)<br>描述:通过使用 select、poll 或 epoll 等系统调用,应用程序可以同时监视多个 IO 描述符。当某个描述符准备好进行 IO 操作时,操作系统会通知应用程序。<br>特点:<br>允许单个线程处理多个连接,节省线程资源。<br>适合高并发场景。<br>适用场景:通常用于网络服务器和高性能应用程序。<br>4. 信号驱动 IO(Signal-driven IO)<br>描述:应用程序可以注册一个信号处理程序,当 IO 操作准备好时,内核会发送一个信号通知应用程序。<br>特点:<br>结合了非阻塞 IO 和信号机制。<br>适合需要异步处理的场景。<br>适用场景:适合需要异步通知的应用程序。<br>5. 异步 IO(Asynchronous IO)<br>描述:在异步 IO 模型中,应用程序发起 IO 操作后,立即返回并继续执行,而不需要等待 IO 操作完成。完成后,应用程序会接收到通知。<br>特点:<br>提高了程序的并发处理能力。<br>复杂性较高,需要管理回调或使用其他机制来处理完成通知。<br>适用场景:适合高性能和高并发的应用程序,如数据库和大规模网络服务。
五种IO模型
什么是异步IO
什么是信号驱动IO?
什么是多路复用IO?
有哪些多路复用IO?
什么是同步非阻塞IO?
<br>
什么是同步阻塞IO?
什么是Reactor模型?
<br>
什么是JavaNIO?
<br>
收藏
立即使用
pdai.tech个人总结整理
收藏
立即使用
Java
PO_wHs1pc
职业:暂无
去主页
Collect
Get Started
个人中心_个人资料
Collect
Get Started
数据整理
Collect
Get Started
个人中心
Collect
Get Started
新建个人客户
评论
0
条评论
下一页
图形选择
思维导图
主题
补充说明
AI生成
修改AI描述
去编辑
重新生成
提示
关闭后当前内容将不会保存,是否继续?
取消
确定
Document