目录
1. IO流
1.1 IO流简介
-
Java对数据的操作是通过IO流的方式。
-
作用:IO流是用来处理设备和设备之间数据的传输问题。
1.2 IO流的分类
根据流动的方向分为:输入流和输出流。
根据处理数据的类型分为:
字节流(每次处理1个字节,后缀是:Stream)和字符流(每次处理2个字节,后缀是:Read或Write)。
流的分类总结:
字节读取流:FileInputStream fis = new FileInputStream(new File("字节读取流"));
包装类:BufferedInputStream bis = new BufferedInputStream(fis); //要包装的字节读取流对象
字节写入流:FileOutputStream fos = new FileOutputStream(new File("字节写入了流"));
包装类:BufferedOutputStream bos = new BufferedOutputStream(fos); //要包装的字节写入流对象
字符读取流:FileReader fr = new FileReader(new File("字符读取流"));
包装类:BufferedReader br = new BufferedReader(fr); //参数:要包装的字符读取流对象
字符写入流:FileWriter fw = new FileWriter(new File("字符写入流"));
包装类:BufferedWriter bw = new BufferedWriter(fw); //参数:要包装的字符写入流对象
1.3字符流和字节流的主要区别
-
字节流每次处理一个字节,它可以处理所有类型的数据。
-
字符流每次处理两个字节,一般用它处理纯文本数据。
1.4流的抽象父类/基类/超类
字节流:
字节读取流抽象父类-InputStream:
public class FileInputStream extends InputStream{ }
字节写入流抽象父类-OutputStream:
public class FileOutputStream extends OutputStream{ }
字符流:
字符读取流抽象父类-Read:
publicclass FileReader extends InputStreamReader {}
publicclass InputStreamReader extends Reader {}
字符写入流抽象父类-Write:
public class FileWriter extends OutputStreamWriter {}
public class OutputStreamWriter extends Writer {}
2.flush方法和close方法的区别
2.1 flush方法
-
作用:刷新字符流字符缓冲区。
-
我们在操作字符写入流的时候,flush方法只要一执行,数据就会被写入到目标文件里面。
2.2 close()方法
-
close方法可以关闭流,且在关闭流之前自动刷新流的缓冲区(但是只能刷新一次)。
-
在close方法执行完成之后,不能再次执行write或者flush方法,否则会抛出:IOException 异常!
2.3字符流缓冲区
字符流缓冲区执行原理:
1、如果是需要频繁的对文件进行读或者写操作,普通的流速度会比较慢,而缓冲流是在普通流的基础上多了一个缓冲区,系统会先把读或者写的数据放到缓冲区(默认缓冲区大小8000字节左右),当读或者写的数据达到一定量(缓冲区被装满),再自动往目标文件里面进行读写。
2、如果当文件读取完的时候还没有装满缓冲区,那么这个时候已经读写到缓冲区的数据需要手动强制使其朝目标文件进行读写。这个手动强制的操作,就是执行flush方法。