1 IO流的分类
1.1 按数据流的方向:输入流、输出流
此输入、输出是相对于我们写的代码程序而言。
- 输入流:从别的地方(本地文件,网络上的资源等)获取资源输入到我们的程序中。
- 输出流:从我们的程序中输出到别的地方(本地文件), 将一个字符串保存到本地文件中,就需要使用输出流。
1.2 按处理数据单位不同:字节流、字符流
1字符=2字节、1字节(byte)=8位(bit)、一个汉字占两个字节长度。
- 字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码。
- 字符流:每次读取(写出)两个字节,有中文时使用该流就可以正确传输显示中文。
字节流和字符流的区别:
字节流读取单个字节,字符流读取单个字符(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码是 3 个字节,中文编码是 2 个字节。)字节流用来处理二进制文件(图片、MP3、视频文件),字符流用来处理文本文件(可以看做是特殊的二进制文件,使用了某种编码,人可以阅读)。简而言之,字节是个计算机看的,字符才是给人看的。
能使用字节流不一定能使用字符流,能使用字符流一定能使用字节流。
1.3 按功能不同:节点流、处理流
- 节点流:以从或向一个特定的地方(节点)读写数据,如FileInputStream。
- 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数,一个流对象经过其他流的多次包装,
2 四大抽象类
IO所谓的四大抽象类就是:InputStream、OutputStream、Reader、Writer。
2.1 InputStream
字节输入流的父类,数据单位为字节。
节点流:
- FileInputStream:文件字节输入流(操作对象为File文件对象)
- ByteArrayInputStream:字节数组输入流(操作对象为字节数组)
处理流 :
- FilterInputStream:过滤字节输入流(简单的实现了InputSteam类,一般用它的子类BufferedInputSteam、DataInputStream等)
- BufferedInputStream:字节输入缓冲流
- DataInputStream:基本数据类型输入处理流
- ObjectInputStream:引用数据类型输入处理流(对象反序列化)
常用方法:
- int read(); 从输入流中读取下一个字节
- void close(); 关闭流
2.2 OutputStream
字节输出流的父类,数据单位为字节。
字节流:
- FileOutputStream:文件字节输出流(操作对象为File文件对象)
- ByteArrayOutputStream:字节数组输出流(操作对象为字节数组)
处理流:
- FilterOutputStream:过滤字节输出流(简单的实现了OutputStream类,一般用它的子类BufferedOutputSteam、DataOutputStream等)
- BufferedOutputStream:字节输出缓冲流
- DataOutputStream:基本数据类型输出处理流
- ObjectOutputStream:引用数据类型输出处理流(对象序列化)
常用方法:
- void write(int b); 将一个integer数组长度写入此流
- void flush(); 刷新此流
- void close(); 关闭该流并释放与之相关的所有资源
2.3 Reader
字符输入流的父类,数据单位为字符。
节点流:
- FileReader:文件字符输入流(操作对象为File文件对象)
- CharArrayReader:字符数组输入流(操作对象为字符数组)
处理流:
- BufferedReader:字符输入缓冲流
- InputStreamReader:字符输入格式处理流(可以设置字符编码等)
常用方法:
- int read(); 读取单个字符
- int read(char[] cbuf, int off , int len ); 将字符读入数组的某一部分
- void close(); 关闭该流并释放与之相关的所有资源
2.4 Writer
字符输出流的父类,数据单位为字符。
节点流:
- FileWriter:文件字符输出流(操作对象为File文件对象)
- CharArrayWriter:字符数组输出流(操作对象为字符数组)
处理流:
- BufferedWriter:字符输出缓冲流
- OutputStreamWriter:字符输出格式处理流(可以设置字符编码等)
常用方法:
- void writer(); 创建一个字符流
- void flush(); 刷新此流
- void close(); 关闭该流并释放与之相关的所有资源