1、IO流分类
1)流向:(以程序为中心)
输入流:数据流进程序
输出流:数据流出程序
2)数据:
字节流:二进制,可以处理一切文件,比如纯文本、音频、视频等
字符流:字符,只能处理纯文本
3)功能:
节点流:包裹源头,读取或写出数据(跟数据源或目的地打交道)
处理流:包裹节电流,增强功能,提供性能(与其它的流打交道)
2、IO四大抽象类
1)抽象类:InputStream、OutputStream、Reader、Writer
2)具体类:
a、以InputStream或Reader结尾的为输入流,以OutputStream或Writer结尾的为输出流。
b、以Stream结尾为字节流,以Reader或Writer结尾为字符流。
c、以InputStream结尾的为字节输入流,以OutputStream结尾的为字节输出流;以Reader结尾的为字符输入流,以Writer结尾的为字符输出流。
3、具体类
1)节点流:
文件:FileInputStream、FileOutputStream
FileReader、FileWriter
数组:ByteArrayInputStream、ByteArrayOutputStream
CharArrayReader、CharArrayWriter
键盘:System.in
显示屏:System.out
2)处理流:
缓冲流:增强性能,内部有一个缓冲池(如何提高性能)
BufferedInputStream、BufferedOutputStream
BufferedReader、BufferedWriter
转换流:将字节转换为字符
如果使用非默认编码保存文件或者读取文件时,需要用到转换流,因为转换流的重载构造方法中有指定编码格式的参数,而FielReader 与 FileWriter 是默认编码的文本文件
InputStreamReader、OutputStreamWriter
数据流:基本类型(8大基本类型和字符串)+数据,允许直接写入或读取基本类型数据
对象流:引用类型+数据,允许直接写入或读取对象
必须序列化的对象才能读取和写入(即必须实现java.io.Serializable接口);
序列化的类中,如果某成员变量不允许序列化,可在该成员变量类型前加trasient关键字。
打印流:可以方便的打印,并且可以格式化输出
PrintStream、PrintWriter
代码示例:
1)将基本数据+类型写入到数组中,并从数组中读取
分析:目的地:数组
数据源:数组
要求保留数据+类型,且为基本数据
选择流:节点流:ByteArrayOutputStream、ByteArrayInputStream
处理流:DataOutputStream、DataInputStream(保留数据+类型)
BufferedOutputStream、BufferedInputStream(提高性能,可要可不要)
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;