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子接口,控制序列化过程。

原文地址:https://www.cnblogs.com/zawjdbb/p/6253436.html