IO
一串流动的数据 从数据源流动至目的地 以程序为中心
分类
流向 输入流 输出流
操作单元 字节流 字符流
功能 节点流(数据直接从数据源到目的地)
功能流(经过包装)
close()方法需要后接入的先关闭
字节流(万能流)
字节输入流 InputStream 流向:输入流 功能:节点流 自身为抽象类
FileInputStream文件输入流
从文件中获取输入字节
构造器
FileInputStream(File对象) FileInputStream(String地址)
方法
read() 每次读入一个字节 输出int字节(char类型)
read(byte[ ] b) 每次读入一个byte数组长度的字节数据
输出int表示读入字节个数,若无返回-1
通过byte数组对数据进行操作
byte数组的长度通常设置为1024的倍数
read(byte[ ] b, int off, int len) 选择读取位置和长度
close() 关闭
结构步骤以及循环多次获取数据的代码
字节输出流 OutputStream 流向:输出流 功能:节点流 自身为抽象类
FileOutputStream文件输出流
构造器
FileOutputStream (File对象| String地址)
FileOutputStream (File对象| String地址, boolean append) 是否接续写入
(会自动创建文件,但不会自动创建父文件夹)
方法
void write(byte date); 写入单个字节
void write(byte[ ] date) 写入byte数组,能够指定起始位置和长度
byte数组的长度一般设为1024的倍数
flush() 刷新,继承自父类
close() 关闭
结构步骤
复制文件夹
不能把文件复制到源文件所在路径
目标路径不能为源文件的子路径
目标文件的父路径若不存在,需要先创建目标文件的父路径
字符流
只能操作纯文本 节点流 txt文件html文件
字符输入流
Rader(抽象父类)->InputStreamReader->FileReader(文件字符输入流)
FileReader
构造器
FileReader(File对象|String路径)
方法(均继承自父类)
read() 单个字符读取
read(char[]) 字符数组读取 字符数组长度可设为1024的倍数
read(char[],int off, int len) 字符数组读取并指定起始和长度
返回读取个数,若无读取返回-1
结构步骤
字符输出流
Writer(抽象父类)-> OutputStreamWriter->FileWriter(文件字符输出流)
FileWriter
构造器
FileWriter(File对象|String路径)
FileWriter(File对象|String路径, boolean append)
是否采用接续写入 不影响本次输入
方法(均继承自父类)
writer(int) 写入单个字符
writer(char[ ]) 写入字符数组
writer(char[ ], int off , int len) 写入字符数组并指定起始和长度
writer(String) 写入字符串
writer(String , int off , int len) 写入字符串并指定起始和长度
flush() 刷新,继承自父类
close() 关闭
结构步骤
缓冲流
用于增强传输功能和效率
1字节缓冲流(无重新改写方法)
字节写入缓冲流 BufferedInputStream
字节输出缓冲流 BufferedOutputStream
通过构直接使用,直接嵌套在字节流外部,方法继承了父类
父类引用=new BufferedInputStream(new FileInputStream(File对象|Stream地址))
父类引用=new BufferedOutputStream(new FileOutputStream(File对象|Stream地址))
2字符缓冲流
通过内部嵌套字符流实现 具备字符流原有方法
字符读取缓冲流
BufferedReader 新方法 readLine()读取一行
自身引用=new BufferedReader(new FileReader(File对象|Stream地址))
字符写入缓冲流
BufferedWriter 新方法 writerLine()写入换行
自身引用=new BufferedWrieter(new FileWrieter(File对象|Stream地址))
基本数据类型流
适用字节输入流
1用于读写带有基本数据类型和String类型的数据
2构造参数为字节流或字节缓冲流
3存在重写方法,需要通过自身引用接收
读取流DataInputStream(InputStream)
新增方法(读取各类数据)
readInt() readdouble() readBoolean() readUTF()字符串
写入流DataOutputStream(OutputStream)
新增方法(写入各类数据)
writerInt(int) writerDouble(double) writerBoolean(boolean) writerUTF(String)
注意:读取写入顺序
对象流
序列化:将对象信息转换为可存储或者可传输的信息格式
对象流(先序列化后反序列化)
序列化输出流 ObjectOutputStream
反序列化输入流 ObjectInputStream
构造方法的参数均为字节流或字节流的缓冲流
1序列化输出流 ObjectOutputStream out=
new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(File对象)));
新增方法
writer数据类型(对应类型的数据) 对各类数据写入
writerObject(Object) 将对象写入
writerObject(数组) 将数组写入
2反序列化输入流 ObjectInputStream in=
new ObjectInputStream(new BufferedInputStream(new FileInputStream(File对象)));
新增方法
read数据类型(对应类型的数据) 读取各类数据
writerObject(Object) 读取对象信息
writerObject(数组) 读取数组
3能够被序列化的对象
实现了空接口 java.io.Serializable 或父类已经实现了Serializable接口
不需要序列化的属性 加transient修饰
静态的内容不能被序列化 若使用原类对象接收,静态值为当前静态区中的内容
转换流(了解)
将字节流转为字符流使用(能够使用字符流的方法)
构造器:
InputStreamReader(InputStream,String charset) 参数为:字节流对象和编码格式
OutputSteamWriter(OutputSteam,String charset) 参数为:字节流对象和编码格式
可能出现乱码的情况:
1.字符编码格式不统一
2.缺少字节个数
不同编码格式汉字所占字节大小:
ISO-8859-1 1个字节
GBK 2个字节
GB2312 2个字节
UTF-8 3个字节