IO流
一、IO的概念
目前代码产生的数据都保存在内存中,但是内存存储数据只是临时存储,无法做到持久化,安全。
1. 持久化:将 内存中的数据 转移到 硬盘 中进行存储的过程。
2. 流:将 数据在 存储设备 和 内存 之间进行传输的通道,管道。
特点:流具有方向性
二、流的分类[重点]
1. 按照方向分类[以内存为参照物]
输入流 :将 存储设备 中的数据读入到 内存 中
输出流 :将 内存 中的数据写出到 存储设备 中
###
2. 按照单位分类
字节流:以字节为单位,可以读写任意类型的文件
字符流:以字符为单位,只能读写文本文件
可以通过记事本打开的文件为文本文件
.txt .java .html
.class .jpg .map3 .map4 视频,音频文件都不属于文本文件
3. 按功能分类
节点流:只具有基本的读写功能
过滤流:在节点流的基础上提供一些其他的功能
三、字节流[重点]
字节流的父类 具有方向性
InputStream:输入流 抽象类
OutputStream:输出流 抽象类
按功能分类
节点流:输入流(FileInputStream)输出流(FileOutputStream)
过滤流:输入流()输出流()
节点流
a) FileOutputStream 文件输出流
1. 构造方法
FileOutputStream(String name): 参数为文件名
FileOutputStream(String name,boolean append)
2. 普通方法
a) void write(int n):一次性往文件中写出一个字节的内容
b) void write(byte[] bs):一次往文件中写出一个字节数组长度的内容
c) void write(byte[] bs,int off,int len):一次性从一个字节数组中写出从下标
off开始,长度为len的内容
b) FileInputStream 文件输入流
1 构造方法:FileInputStream(String name):name:文件名
2.普通方法
a int read() 一次读单个字节的字符,返回的是读到的内容,当文件读取到末尾
时返回-1
b int read(byte[] bs) 一次读一个字节数组长度的内容 返回的是读到的长度,
当读到文件末尾时返回-1
c int read(byte[] bs,int off,int len) 一次从下标off开始,长度为len读入到数
组中
过滤流
1. 缓冲流 BufferedOutputStream|BufferedInputStream【重点】
作用:减少访问磁盘的次数,提高IO读写的效率
将数据一次性写入到缓冲区,通过flush()将缓冲区的内容一次性写出到文本中
flush():清空缓冲区 将缓冲区的内容一次性写入到文件中
close():关闭流并释放缓冲流中所有的资源。
2. DataOutputStream|DataInputSteam【重点】
作用:提供读写8种基本数据类型以及String类型
读写字符串 writeUTF(String s)|readUTF();
3. ObjectOutputStream|ObjectInputStream【重点】
作用
1. 提供了缓冲的功能
2. 提供了读写8种基本数据类型以及字符串的方法
3. 提供了读写对象的方法 writeObejct(Object o)|readObject()
序列化:将对象放在流上进行读写的过程。
注意
1. 想要能够序列化应该实现Serializable接口
2. 当文件读取到末尾时会抛出一个EOFException(文件读取到末尾的异常),
可以充当循环结束的条件
3. 如果一个类想要进行序列化,那么必须保证所有的属性都是可序列化的,也就是都必须实现Serializable接口(属性为引用类型 Address)
注意:8种基本数据类型所对应的包装类都实现类Serializable接口,其中数字类型的父类为Number也已经实现了Serializable接口。
4. 如果在对一个对象进行序列化的过程中,不想让某一个属性参与序列化,可以使用关键字transient来修饰,那么这个属性就不会参与序列化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMZPyvNr-1571964895192)(E:\Corejava\课堂笔记及代码\day20_IO流\笔记\transient.png)]
###
四、字符流
1. 编码格式
a. 西欧:ISO-8859-1
b. 简体中文:GBK (大陆)你(34903) 好(32065)
c. 繁体中文:BIG5(台湾)XX34903 YY32065
d. 万国码:UTF-8
中文乱码的成因:编解码格式不一致
解决中文乱码:使用相同的编解码格式
2. 字符流
具有方向性
字符输入流:Reader 抽象类 字符类的父类
字符输出流:Writer 抽象类 字符流的父类
按功能分类
节点流
1. FileReader|FileWriter【重点】
a) 构造方法
FileWriter(String fileName) fileName:文件路径
FileReader(String fileName)
b) 常用的普通方法
1. wirte(int a) 一次写一个字符到文件中
2. write(char[] cs) 一次写一个字符数组长度的内容到文件中
3. write(String s) 一次写一个字符串到文件中
4. int read() 一次读一个字符到内存中
5. int read(char[] cs) 一次读一个字符数组长度的内容到内存中,返回值为读取的长
度,当文件读取到末尾时返回-1
6. int read(char[] cs,int off,int len)一次读字符数组从下标off开始 长度为len的内
容到内存中,当文件读取到末尾时返回-1