1.序列化,将属性封装成一个对象,通过对象文件输入流(ObjectFileInputStream)将原本存放在内存(短暂的,随着程序结束对象消失而结束)中的对象保存在磁盘文件中,用户可以将这个文件发送给别人,通用反序列化拿到里面的属性(不需要new对象)
//数据封装成一个对象存到文件中的一个过程,要想可以被序列化必须实现serializable接口,该接口没有任何抽象方法(标记接口),保存在磁盘的文件只能被反序列化打开
public class Teacher implements Serializable{
private static final long serialVersionUID = 111;//标记,当属性发声改变时必须将UID也改变一 下,反序列化时会自动匹配上一次UID,UID发生改变此时的文件已经没有用
private transient int age; //使用transient 或static关键字 数据无法保存下来
private String name;
private Double number;
private float size;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getNumber() {
return number;
}
public void setNumber(Double number) {
this.number = number;
}
public float getSize() {
return size;
}
public void setSize(float size) {
this.size = size;
}
public Teacher() {
super();
}
@Override
public String toString() {
return "[age=" + age + ", name=" + name + ", number=" + number + ", size=" + size + "]";
}
序列化
Teacher t = new Teacher();
t.setName("小明");
t.setAge(19);
t.setSize(15.5f);
t.setNumber(4000.0);
Teacher t2 = new Teacher();
t2.setName("小红");
t2.setAge(19);
t2.setSize(15.4f);
t2.setNumber(333.0);
ObjectOutputStream bs = new ObjectOutputStream(new FileOutputStream("J:\\a.jpg"));
bs.writeObject(t); //通过ObjectOutputStream将对象写到J盘下的a.jpg
bs.writeObject(t2); //中 (该文件无法正常打开)
bs.close();
反序列化解析文件
//用objectInputStream(高级流)套一个fileInputStream(低级流),当管道关闭时,再次创建对象,返回的依旧文件的new第一个对象
ObjectInputStream os = new ObjectInputStream(new FileInputStream("J:\\a.jpg"));
Teacher s = (Teacher)os.readObject(); //读对象,返回一个Object类型,如果知道文件里面是什么内型可以强转
Teacher s2 = (Teacher)os.readObject();
System.out.println(s.getName());//打印文件里面的内容,文件中已经重写了toString方法,如果没有重写tostring则会打印地址
System.out.println(s2.getName());
os.close();