转换流 指定编码表
OutputStreamWrite 字符流向字节的桥梁 -编码
使用步骤:
1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称
2.使用OutputStreamWriter对象中的方法Write,把字符转换为字节存储缓冲区中(编码)
3.使用OutputStreamWriter对象中的方法flush ,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
4.释放资源
InputStreamReader 字节流向字符的桥梁 -解码
使用步骤:
1.创建InputstreamReader对象,构造方法中传递字节输入流和指定的编码表名称
2.使用InputStreamReader对象中的方法read读取文件
3.释放资源
注意事项:
构造方法中指定的编码表名称要和文件的编码相同,否则会发生乱码
ObjectOutputStream 序列化流 ——对象的序列化流 写对象
writeObject();
构造方法:
ObjectOutputStream(OutputStream out)创建写入指定OutputStream 的 ObjectOutputStream。参数:
OutputStream out:字节输出流
特有的成员方法:
void write0bject(Object obj)将指定的对象写入ObjectOutputStreamo
使用步骤:
1.创建ObjectOutputStream对象,构造方法中传递字节输出流
2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
3.释放资源
ObjectInputStream 反序列化流 ——读对象
readObject();
使用步骤:
1.创建ObjectInputStream对象,构造方法中传递字节输入流
2.使用ObjectInputStream对象中的方法read0bject读取保存对象的文件
3.释放资源
4.使用读取出来的对象(打印)
readObject方法声明抛出了classNotFoundException(class文件找不到异常)当不存在对象的class文件时抛出此异常
反序列化的前提:
1.类必须实现serializable2.必须存在类对应的cLass文件
序列化和反序列化的时候,会抛出NotSerializableException没有序列化异常
类通过实现java.io.Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。
Serializable接口也叫标记型接口
要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记
当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记
有:就可以序列化和反序列化
没有:就会抛出 NotSerializabLeException异常
去市场买肉-->肉上有一个蓝色章(检测合格)-->放心购买-->买回来怎么吃随意
static关键字:静态关键字
静态优先于非静态加载到内存中((静态优先于对象进入到内存中)被static修饰的成员变量不能被序列化的,
序列化的都是对象private static int age;
transient关键字:瞬态关键字
被transient修饰成员变量,不能被序列化
