1、缓冲流为什么会提高IO流读写的效率? 
缓冲区存在内存中,内存读写数据的时候,与内存之间的读写最快 
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的? 
在IDEA中,使用 FileReader 读取项目中的文本文件。由于IDEA的设置,都是默认的 UTF-8 编码,所以没有任何 
问题。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。 
按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。 
通过转换流转换文件编码 
转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定 
的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。 
转换流 java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符 
编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。 
 
3、序列化流中的serialVersionUID的作用 
Serializable 接口给需要序列化的类,提供了一个序列版本号。 serialVersionUID 该版本号的目的在于验证序 
列化的对象和对应类是否版本匹配。 
4、请根据自己的语言表述IO流的体系 
四个基本类:InputStream OutputStream Reader Writer类 可以按照数据流向划分,也可以按照数据类型划分. 
一切皆为字节 
字节流  
java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字 
节输出流的基本共性功能方法。 
    public void close() :关闭此输出流并释放与此流相关联的任何系统资源。 
    public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。 
    public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。 
    public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 
    public abstract void write(int b) :将指定的字节输出流。 
 
java.io.InputStream 抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入 
流的基本共性功能方法。 
    public void close() :关闭此输入流并释放与此流相关联的任何系统资源。 
    public abstract int read() : 从输入流读取数据的下一个字节。 
    public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。 
java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。 
    public void close() :关闭此流并释放与此流相关联的任何系统资源。 
    public int read() : 从输入流读取一个字符。 
    public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。 
java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。 
     void write(int c) 写入单个字符。 
     void write(char[] cbuf) 写入字符数组。 
     abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。 
     void write(String str) 写入字符串。 
     void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。 
     void flush() 刷新该流的缓冲。 
     void close() 关闭此流,但要先刷新它。 
缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类: 
字节缓冲流: BufferedInputStream , BufferedOutputStream 
字符缓冲流: BufferedReader , BufferedWriter 
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO 
次数,从而提高读写的效率。 
转换流 
转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定 
的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。 
转换流 java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符 
编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。 
序列化 
java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。 
ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。 
打印流 
平时我们在控制台打印输出,是调用 print 方法和 println 方法完成的,这两个方法都来自于java.io.PrintStream 类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式 |