1.分类:
1.字节流和字符流
字节流操作对象为字节(基类inputStream/outputStream),字符流(基类:reader/writer)对字符操作
字节流应用范围更广,因为所有文件最终都是二进制文件,字符流方法操作更方便。
2.输入流和输出流
输入流用于读取,不能写;输出流用于写入,不能读。i/o方向要针对特定对象来说
3.节点流/处理流(低级流/高级流)
能直接作用于特定设备上是节点流,程序能直接连接到实际数据源,也是低级流
需要对已经存在的流进行封装或连接,通过封装后的流来实现输入/输出操作,称为处理流,也是高级流,操作更为方便
2.基本方法:
1.输入:
int read() 从输入流中读取一个字节/字符 转为int返回 字节为低8位
int read(byte[] b/char[] b) 从输入流中最多读b.length个字节/字符放入数组b 返回读取的字节/字符数
int read(byte[]/char[] b,int off,int len)从输入流中最多读取len个字节/字符,放入数组b中,从off位置开始放,返回读取到的字节/字符数
2.输出:
void write(int c)将指定的字节/字符c写入输出流中,字节一次只能写入低8位字节,因此int需要写4次,每次需位移8位
void write(byte[] /char[] c)将字节数组/字符数组写入到输出流中,最多写c.length个
void write(byte[]/char[] c,int off,int len) 将字节/字符数组写入到输出流中,从数组的off位置开始写,最多写len个
3.常见流:
1.fileInputStream/fileOutputStream :
文件字节输入/输出流 用于操作文件的节点流
2.fileReader/fileWriter:
文件字符输入/输出流 用于操作文件的节点流(只能操作文本文件,因为除了文本文件都是二进制文件)
3.dataInputStream/dataOutputStream
数据字节输入/输出流 高级流,能直接输入/输出int long duoble…等
4.bufferedInputStream/bufferedOutputStream
字节缓冲输入/输出流 高级流 用了缓冲区,提高io性能,输出时必须加上flush()方法
5.inputStreamReader/outputStreamWriter:
转换流 高级流 能把字节转成字符,涉及编码问题
6.bufferedReader/bufferedWriter:
字符缓冲输入/输出流 高级流 用了缓冲区,io性能高,含有readLine()方法,一次可以读一行,返回一个字符串,输出有newLine()方法用于换行
7.priintWriter:
字符打印流,可以作用于实际数据源也可以封装其他流,构造多样且简单,换行简单,常用它取代bufferedWriter与BufferedReader一起用
8.objectInputStream/objectOutputStream:
对象输入/输出字节流 高级流,对象序列化/反序列化流,能将java对象转成字节存储到相应位置,并且读取出来。
具体应用看构造函数,不要忘记close()和flush()方法