/*
* 对象的输入输出流:
* 作用:用于写对象的信息与读取对象的信息,对象信息一旦写到文件上那么对象的信息就可以做到持久化了。
* 对象的输出流:
* ObjectOutputStram
* 使用步骤:
* 1.定位要输出的文件位置;
* 2. 定义输入字节流通道:
* 3. 定义对象输出通道:
* 4.输入对象信息:
* 5.关闭资源;
* 对象的输入流:
* ObjectInputStream
* 使用步骤:
* 1.定义要输入的文件的对象信息文件位置;
* 2.定义输入字节流通道:
* 3.定义对象输入通道;
* 4.读取对象信息;
* 5.关闭资源;
*
* * 注意事项:
* 1. 如果对象需要被写入到文件中,那么对象必须实现Serializable接口,Serializable接口没有任何方法,是一个标识接口;
* 所有的集合类都实现了该接口;
* 2.对象的反序列化不会调用构造方法;
* 3. serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID是通过类名、成员名、报名和工程名算出来的数字。
* 4.如果反序列化使用了ObjectInputStream反序列化的时候,ObjectInputStream 会先读取文件的serialVersionUID,然后与本地的class文件的serialVersionUID
* 进行对比,如果id不一致,那么反序列化就会失败;
* 5.如果序列化与反序列化的时候可能修改类的成员,那么最好最开始就给这个类指定一个serialVersionUIG,如果类的serialVersionUID指定了,俺么在序列化
* 和反序列化的时候,jvm就不会再计算serialVersionUID;
*
* 6.成员前面加上transient关键字,该成员就不会被写出了、
* 7.如果要给类中的成员是另一个类的引用,那么该类也要实现Serializable,才能够被写入;
*/
package com.michael.lin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class User implements Serializable{
String userName; //用户民
String password; //密码
public User(String userName, String password){
this.userName = userName;
this.password = password;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "用户名" + this.userName + "密码" + this.password;
}
}
public class Demo03 {
public static void main(String[] args) throws IOException, ClassNotFoundException{
//把User的对象持久化存储
writeObj();
readObj();
}
//把对象的信息写入到硬盘上 --> 对象的序列化
public static void writeObj() throws IOException{
User user = new User("michael", "123");
//找到目标文件
File file = new File("g:\\obj.txt");
//建立文件输出流通道
FileOutputStream fileOutputStream = new FileOutputStream(file);
//建立对象输出流通道
ObjectOutputStream objOutputStream = new ObjectOutputStream(fileOutputStream);
//对象输出
objOutputStream.writeObject(user);
objOutputStream.close();
}
//对象的反序列化,把文件中的对象信息读取出来
public static void readObj() throws IOException, ClassNotFoundException{
//1.定义对象信息文件袋饿位置
File file = new File("g:\\obj.txt");
//2.定义输出文件字节流:
FileInputStream fileInputStream = new FileInputStream(file);
//3.定义对象输出通道
ObjectInputStream objInputStream = new ObjectInputStream(fileInputStream);
//4.读取对象信息;
System.out.println(objInputStream.readObject());
//5.关闭资源
objInputStream.close();
}
}