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