java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能,所有流类型都在io包中。
从不同角度对其进行分类:
按数据流方向的不同,分为输入流和输出流
按处理数据单位的不同,分为字节流和字符流
按功能的不同,分为节点流和处理流
节点流:从数据源读写数据
处理流:在已存在的流之上,通过对数据的处理为程序提供更为强大的读写功能
所有流分别继承自输入字节(8bit)流:InputStream,输入字符流Reader,输出字节流:OutputStream,输出字符流Writer
处理流--缓冲流:
BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
缓冲流要套接在相应的节点流之上,对读写数据提供缓冲功能,提高了读写效率,同时增加了新的方法:
mark()定位,reset(),BufferedReader提供readLine()方法用于读取一行,BufferedWriter提供newLine()写入一个行分隔符。
对于输出的缓冲流,写出的数据会先缓存在内存中,使用flush()方法会使内存中的数据立刻写出。
处理流--转换流:
InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间的转换。
InputStreamReader要与InputStream套接。
OutputStreamWriter要与OutputStream套接。
转换流工作时可以指定编码集合,如:
InputStream isr = new InputStreamReader(System.in,"ISo8859_1");
处理流--数据流:
utf-8。
DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,使用时需要进行套接。
DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(int,double)的方法。
Print流:
PrintWriter和PrintStream都属于输出流,分别针对字符和字节。
PrintWriter和PrintStream提供了重载的print。
PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
PrintWriter和PrintStream有自动flush功能。
Object流:
序列化:Serializable 标记接口,没有方法,标记给编译器看,说明可序列化,JDK控制序列化过程。
ObjectInputStream和ObjectOutputStream。
transient 透明,修饰的成员变量在序列化时不予考虑,即跳过。
Externalization接口:Serializabe子接口,控制序列化过程。