IO流
目的:想要读写文件内部的内容
方案:流
流:管道 数据以流动的形式,先入先出的方式进行传输
数据源——数据——目的地
java提供的io包
流的分类:
流向:(以程序为中心)
输入流
输出流
操作单元分:
字节流:任何数据都可以传输
字符流:文本
功能分
节点流:操作基本功能的,实现读入写出的,数据从数据源头到目的地的
功能流:增强功能,提高性能,操作于节点流之上的
字节流
InputStream FileInputStream
构造器:
FileInputStream(File file)//通过打开一个到实际文件的连接来创建一个FileInputStream
FileInputStream(String name)
- 建立联系
- 选择流
- 读数据
- 关闭
每次读入一个字节的内容,虽然可以重复读取多次,太麻烦,效率低
OutPutStream FileOutputStream
- 选择流
- 写出
- 输出
- 关闭
如果目标文件不存在,系统会自动为你创建,但是目录不会
选择流boolean append ,true 追加,false 覆盖
字符流
字符流:只能读写纯文本的内容
字符输入流 Reader FileReader
字符输出流Writer FileReader
功能流
缓冲流:
提高节点流的功能,增强性能,加快读写效率
BufferedInputStream 字节输入缓冲流
BufferedOutputStream 字节输出缓冲流
BufferedReader 字符输入缓冲流
新增方法:readLine()读取一行,返回读入的内容,没有返回null
BufferedWriter 字符输出缓冲流
新增方法:newLine()换行符
转换流
字节流转换成字符流
基本数据类型流
字节流的功能流
读写带有基本数据类型|字符串类型的数据
DataInputStream
新增方法:readXxx()
DataOutputStream
新增方法:writeXxxx()
不能发生多态
读写数据顺序要一致
对象流
数据+数据类型
序列化和反序列化:序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程
序列化输出流:ObjectOutputStream
反序列化输入流:ObjectInputStream
先序列化后反序列化,不是所有的类都能序列化,实现java.io.Serializable
不是所有的属性都需要序列化 transient
静态的内容不能序列化
如果父类有实现序列化,子类没有,子类中的所有内容都能序列化
如果父类中没有实现序列化,子类有实现序列化,子类只能序列化自己的内容