练习:将GBK文件转换为UTF-8得文件
- 指定GBK编码得转换流,读取文本文件,用InputStreamReader
- 使用Utf-8的转换流写入到新文件中,OutputStreamWriter
代码演示
序列化流:专门用来写对象的以前都是操作字符或者字符串的
1.目的:
把内存中的数据保存在硬盘内部没持久化保存
2.概述:
一种对象化序列机制,把类的对象保存在我们的文件1里面,取出的时候也是对象,可以使用对象的方法
ObjectOutPutStream
对象的持久化存储,对象序列化就是把成员属性和方法存储起来
构造方法
ObjectOutputStream(OutputStream out):--->创建一个指定OutputStream对象的ObjectOutPutStream类对象
独有方法
writeObject(Object obj);---->将指定的对象写道ObjectOutputStream中。
注意:
当某个类需要序列化的时候,没有实现序列化接口就会抛出异常
所以必须实现序列化接口Serializable,然后就可以启用序列化功能了。
Serializable接口又称为标记性接口,打上标记之后说明该类可以序列化和反序列化
如果没有实现这个接口就不可以。
格式:class 类名 implements Serializable
序列化操作
1.需要保存的类实现序列化和反序列化接口Serializable
2.该类的属性不能被transient修饰,否则该属性不能被序列化
序列化实现代码
序列化的类、
序列化的实现
ObjectInputStream:反序列化类
1.目的:
反序列化流,将之前序列化的ObjectOutputStream写到文件的对象,再次恢复为内存中的对象
构造方法
ObjectInputStream(inputStream in);---->把学列化的对象反序列化
独有方法
public final Object readObject();---->反序列化流中读取一个对象
饭序列化代码
注意
必须序列化之后才能饭序列化,如果类改变了就需要重新序列化
static关键字:静态关键字
静态优先于对象加入到内存中,所以对下个还没有创建就已经加入内存中了
所以被static修饰得是不参与序列化得
对于JVM
能进行反序列化的对象,前提条件就是必须能找到class文件的类,如果找不到就只能抛出一个classnotfound异常。
当JVM序列化的时候,能找到class文件,但是如果对下个发生了修改,那么反序列化就会抛出一个InvalidClassException异常。
打印流
很方便的打印各种数据类型的值到文件中,不会出现乱码的情况
构造方法
1.PrintStream(File file);--->输出目的地是一个文件
2.PrintStream(String filename);--->输出目的地是一个文件路径
3.PrintStream(OutputStream outr);--->输出目的地是一个输出流
改变数据输出位置
1.打印到控制台:System.out.println();
2.打印到文件中:System.setOut("打印到是吗位置的地址");