15、IO

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

在这里插入图片描述

过滤流【重点】

字符缓冲流 BufferedReader|BufferedWriter|PrintWriter

一般使用BufferedReader和PrintWriter结合
常用方法
println() 写出到文件中并换行(PrintWriter中的方法)
readLine() 一次从文件中读取一行数据(BufferedReader中的方法)

在这里插入图片描述

桥转换流 OutputStreamWriter|InputStreamReader【重点】

作用

1. 设置编码格式

2. 将一个字节流转换成一个字符流

桥转换流的使用步骤

1. 创建字节流

2. 创建桥转换流 可以设置编码格式

[3. 包装过滤流]

4. 读写数据

5. 释放资源

桥转换流 OutputStreamWriter|InputStreamReader【重点】

作用

1. 设置编码格式

2. 将一个字节流转换成一个字符流

桥转换流的使用步骤

1. 创建字节流

2. 创建桥转换流 可以设置编码格式

[3. 包装过滤流]

4. 读写数据

5. 释放资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值