缓冲流
也叫高效流,对基本流进行增强
字节缓冲流:BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader,BufferedWriter
原理:创建对象时,创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高效率
字节缓冲流构造方法:
public BufferedInputStream(InputStream in)
public BufferedOutputStream(OutputStream Out)
字节缓冲输出流:
字节缓冲输入流:
字符缓冲流构造方法:
public BufferedReader(Reader in):创建一个新的缓冲输入流
public BufferedWriter(Writer in):创建一个新的缓冲输出流
字符缓冲输出流
字符缓冲输入流
字符编码Character Encoding
自然语言的字符与二进制之间的对应规则
按照某种规则,将字符储存在计算机中,称为编码
反之,将计算机中的二进制数按某种规则解析显示出来,称为解码
如果存储和解析的规则不同,会导致乱码
字符集:也叫编码表,是一个系统所支持的所有字符的合集
常见有ASCII字符集,ISO-8859-1字符集,GBxxx字符集,Unicode字符集UTF-8最为常见
转换流
java.io.InputStreamReader,是Reader的子类,它读取字节,并使用指定的字符集将其解码为字符。他的字符集可以由名称指定,也可以接受平台的默认字符集
构造方法:
InputStreamReader(InputStream in):创建一个使用默认字符集的字符流
InputStreamReader(InputStream in,String charsetName):创建一个指定字符集的字符流
OutputStreamWriter
InputStreamReader
序列化和反序列化
序列化:将一个对象的数据,类型和对象中存储的属性通过字节序列写出到文件中进行持久保存的方式叫序列化
反序列化:将字节序列从文件中读取出来,重构对象叫反序列化
ObjectOutputStream:对象的序列化流
ObjectIutputStream:对象的反序列化流
static关键字:静态优先于非静态加载到内存中,被static修饰的成员变量不能被序列化,序列化的都是对象
transient关键字:被transient修饰的成员变量不能被序列化
序列化冲突异常的原理和解决方案:
当JVM反序列化对象时,没有找到class文件的类,会抛出ClassNotFoundException异常
当JVM反序列化对象时,能找到class文件,但是class文件在反序列化时发生了修改,抛出InvalidClassException异常:
该类的序列版本号与从流中读取的类描述的版本号不同;
该类包含未知数据;
该类没有可访问的无参数构造。