首页 > 基础资料 博客日记
IO
2024-03-28 10:00:03基础资料围观447次
IO
所有输入流的基类:InputStream / Reader
所有输出流的基类:OutputStream / Writer
字节流
InputStream
常用方法:read(), skip(), available(), close()
-
FileInputStream
-
DataInputStream
: 用于读取指定类型数据,不能单独使用,必须结合其它流,比如FileInputStream
。 -
ObjectInputStream
: 从输入流中读取 Java 对象(反序列化) -
BufferedInputStream
OutputStream
常用方法:write(), flush(), close()
-
FileOutputStream
-
DataOutputStream
-
ObjectOutputStream
: 将对象写入到输出流 (序列化)。 -
BufferedOutputStream
常用字符编码所占字节数?utf8
:英文占 1 字节,中文占 3 字节,unicode
:任何字符都占 2 个字节,gbk
:英文占 1 字节,中文占 2 字节。
字符流
Reader(字符输入流)
Reader
用于读取文本, InputStream
用于读取原始字节。
Reader
常用方法:read(), skip(), close()
字节流转换为字符流的桥梁:InputStreamReader
// 字节流转换为字符流的桥梁
public class InputStreamReader extends Reader {
}
// 用于读取字符文件
public class FileReader extends InputStreamReader {
}
Writer(字符输出流)
Writer
用于将数据(字符信息)写入到目的地(通常是文件)Writer
常用方法:write(), append(), flush(), close()
字符流转换为字节流的桥梁:OutputStreamWriter
// 字符流转换为字节流的桥梁
public class OutputStreamWriter extends Writer {
}
// 用于写入字符到文件
public class FileWriter extends OutputStreamWriter {
}
字节缓冲流
BufferedInputStream
BufferedOutputStream
字节缓冲流会先将读取到的字节存放在缓存区,大幅减少 IO 次数,提高读取效率。
字符缓冲流
BufferedReader
BufferedWriter
打印流
PrintStream
PrintWriter
IO模型
BIO (Blocking I/O)同步阻塞IO模型
应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。
NIO (Non-blocking/New I/O)
同步非阻塞 IO 模型:应用程序会一直发起 read 调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。(通过轮询操作,避免了一直阻塞。)
-
NIO 面向块,I/O 面向流
-
非阻塞、面向缓冲、基于通道的 I/O,可以使用少量的线程来处理多个连接,大大提高了 I/O 效率和并发。
NIO核心组件:
-
Buffer(缓冲区)
-
Channel(通道):双向的、可读可写的数据传输通道
-
Selector(选择器)
NIO零拷贝:零拷贝是指计算机执行 IO 操作时,CPU 不需要将数据从一个存储区域复制到另一个存储区域,从而可以减少上下文切换以及 CPU 的拷贝时间。
AIO (Asynchronous I/O)
异步 IO 模型:异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?