一、 IO
1.1 简介
| 1.IO 用于设备之间传输数据以及交互数据 I=>Input 输入 O==>Output 输出 |
| 2.使用场景: |
| A.读写文件的内容 |
| B.用于上传与下载文件 |
| C.即时通讯中聊天传输数据(qq 微信) |
| 3.分类: |
| 按照功能划分:字节流与字符流 |
| 按照流向划分:输入流与输出流 |
| 4.解释输入流与输出流 |
| 5.字节流 |
| A.万物皆字节 硬盘中的任何的数据都可以使用字节来进行表示 |
| B.字节流一般用于来读写音频与视频 |
| C.字节流分类: 字节输入流与字节输出流 |
| 6.字符流 |
| A.字符流=字节流+编码表 字符流底层也是使用字节流来进行操作 只是将字节通过编码表转换为字符 |
| B.字符流一般用于操作纯字符的文件 |
| C.字符流分类:字符输入流与字符输出流 |
| 7.IO 流使用的注意点 |
| A.在使用IO流资源的时候 需要处理一些异常 异常处理方法:a.捕获 b.抛出 |
| B.IO流资源使用完之后 一定要关闭资源 IO流资源比较消耗内存 建议在finally中进行关闭 |
| C.IO中的流资源都是使用java.io下包资源 |
| |
1.2 OutputStream
1.2.1 简介
| A.此抽象类 |
| B.表示输出字节流的所有类的超类 |
| C.子类 |
1.2.2 常用方法
方法名称 |
方法描述 |
public void close() |
关闭流资源 |
public void flush() |
刷新(将缓冲区的数据刷新到硬盘中) |
public void write(byte[] b) |
一次写入多个字节 |
public abstract void write(int b) |
一次写入一个字节 |
public void write(byte[] b, int off, int len) |
一次写入数组中指定长度的字节 |
1.3 FileOutputStream
1.3.1 简介
| A.文件输出流是用于将数据写入 File |
| B.FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter |
1.3.2 构造方法
方法名称 |
方法描述 |
public FileOutputStream(File file) |
创建一个向指定 File 对象表示的文件中写入数据的文件输出流 |
public FileOutputStream(File file,boolean append) |
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处 |
public FileOutputStream(String name) |
创建一个向具有指定名称的文件中写入数据的输出文件流 |
public FileOutputStream(String name, boolean append) |
创建一个向具有指定 name 的文件中写入数据的输出文件流 |
1.3.3 构造方法三件事
| A.实例化FileOutputStream |
| B.创建一个空的文件 |
| C.将FileOutputStream指向这个空的文件 |
1.3.4 使用的步骤
| A.实例化FileOutputStream |
| B.调用写的方法 |
| C.关闭资源 |
1.4.1 简介
| A.此抽象类 |
| B.表示字节输入流的所有类的超类 |
| C.子类 |
1.4.2 常用方法
方法名称 |
方法描述 |
public void close() |
关闭流资源 |
public abstract int read() |
一个一个字节读取 |
public int read(byte[] b) |
一次读取多个字节放入到缓冲区数组中 |
public int read(byte[] b, int off, int len) |
一次读取指定字节放入到缓冲区数组中 |
1.5.1 简介
| A.FileInputStream 用于读取诸如图像数据之类的原始字节流。 |
| B.要读取字符流,请考虑使用 FileReader |
1.5.2 构造方法
方法名称 |
方法描述 |
public FileInputStream(File file) |
通过打开一个到实际文件的连接来创建一个 FileInputStream |
public FileInputStream(String name) |
通过打开一个到实际文件的连接来创建一个 FileInputStream |
1.5.3 构造方法两件事
| A.实例化FileInputStream |
| B.将FileInputStream 指向需要操作的文件 |
1.5.4 使用步骤
| A.实例化FileInputStream |
| B.调用读的方法 |
| C.关闭资源 |
1.5.5 read()与 read(b)
| A.read() 表示一个一个字节读取(效率低) read(b) 一次读取多个字节(效率高) |
| B.read() 返回的是读取的内容 read(b) 返回读取有效的字节个数 |
1.6 高效流
1.6.1 简介
| 1.高效写 |
| A.BufferedOutputStream 该类实现缓冲的输出流 |
| B.底层有一个缓冲区的数组 数组长度是8192 |
| 2.高效读 |
| A.BufferedInputStream 高效读 |
| B.底层有一个缓冲区的数组 数组长度是8192 |
| 3.高效读与高效写 本身没有读写的功能 只能对OutputStream与InputStream的封装 |
| 4.高效原因: |
| 高效读 一次读取8192个字节的内容存入的缓冲区数组 数组是存在内存中 |
| 每次读取数据的都是从内存中读取数据 避免与磁盘进行多次交互 所有效率高 |
| 高效写同理 |
1.6.2 构造方法
构造方法名称 |
构造方法描述 |
public BufferedOutputStream(OutputStream out) |
创建一个新的缓冲输出流,以将数据写入指定的底层输出流 |
public BufferedInputStream(InputStream in) |
创建一个 BufferedInputStream 并保存其参数,即输入流 in |
1.7 关闭资源
| 1.在finally中关闭资源 |
| 2.在关闭资源的时候 一定要进行非空判断 |
| 3.关闭资源从下往上进行关闭资源 |
1.7 字符流
1.7.1 简介
| 1.概念:用于操作(读写)字符 |
| 2.分类: |
| A.字符输入流 |
| B.字符输出流 |
| 3.使用字符流原因 |
| 使用字节流来操作字符的时候 可能会产生乱码 使用字节流操作纯字符比较麻烦 需要使用字符流 |
| 字符流=字节流+编码表 |
| 4.在所有的编码表中 中文的第一个字节都是负数 |
1.7.2 常用的编码表
| 1.ASCII码表 |
| A.主要是包含西方国家使用的字符 |
| B.范围:0-127 |
| C.所有的码表的0-127的范围 都是遵循ASCII码表规则 |
| D. 97 == 'a' 65 ==> 'A' 48 ==>'0' |
| 2.GBK码表 |
| A.GBK码表是可以包含中文的字符 一般在港澳地区使用 |
| B.GBK码表中一个中文占两个字节 |
| C.记事本默认的码表是GB2312 GBK是GB2312延伸的一种码表 |
| D.记事本 eclipse(开发工具) |
| 3.UTF-8码表 |
| A.大部分公司使用的编码表就是UTF-8 |
| B.在UTF-8码表中 一个中文是占三个字节 |
| C.idea中默认的码表就是UTF-8 |
| 4.Unicode码表 |
| A.Unicode码表被称为是万国码表 一般用于国际的交流 |
| B.范围:0-65535 |
| C.参考网站:http://www.jsons.cn/unicode/ |
1.7.3 字符串编解码
编码:字符转换为字节数组
解码: 将字节数组转换为字符串
方法名称 |
方法描述 |
public byte[] getBytes() |
使用平台的默认字符集(编码表)将此 String 编码为 byte 序列 |
public String(byte[] bytes) |
通过使用平台的默认字符集解码指定的 byte 数组 |
public byte[] getBytes(String charsetName) |
使用指定的字符集将此 String 编码为 byte 序列 |
public String(byte[] bytes, String charsetName) |
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String |
本文作者:Ritchie里其
本文链接:https://www.cnblogs.com/wang-zeyu/p/16803683.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步