package bean;
import java.io.Serializable;
public class Person implements Serializable{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
}
======================分割线=================================
/*
* 能操作对象的流:
* ObjectInputStream和ObjectOutputStream
* 被操作的对象需要实现Serializable(接口)
*
* 这两个流可以将内存中的对象写到硬盘上→持久化
* 这两个流也有序列化的概念,即第一个操作的对象,第二个……
*/
package demo;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import bean.Person;
public class ObjectOutputStreamDemo {
public static void main(String[] args) throws IOException {
writeObj();
}
public static void writeObj() throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.Object"));
/*
* 对象从内存存储到硬盘上,需要存储到文件中,且这里是关联目的且操作文件,那么用FileOutputStream,它可以写文件但是不可以
* 写对象,所以外面再套个ObjectOutputStream。
*
* 也可以想成,需要额外功能?需要写对象,那就ObjectOutputStream。
*/
/**
* ObjectOutputStream写对象方法:
* public final void writeObject(Object obj) throws IOException
*/
oos.writeObject(new Person("小强",30));
oos.close();
}
/*
* writeObj()运行抛出异常:
* Exception in thread "main" java.io.NotSerializableException: bean.Person
* 说明:NotSerializableException是指某个要序列化的对象不能实现 java.io.Serializable 接口。
* 查找API发现Serializable接口是要求对象具备比较功能,要求用writeObject()方法写入的对象必须实现该接口,才能被序列化,
* 相当于TreeSet集合必须将对象排序一样,所以Person类实现Serializable接口
*/
//在Person类实现Serializable接口后,运行程序,不再抛出异常
}
/*
* 运行结果,在当前目录下新建obj.txt文本文件,其内容是一堆乱码,查找API,发现ObjectOutputStream类中:对象的默认
* 序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值。
* 也就是说,那一堆乱码中包含对象的类名,类签名等信息。
*
* 其实ObjectOutputStream类是将对象从内存写入硬盘中,不是让txt文件去解析,所以txt文件中出现乱码也无所谓。
* 目的就是将对象持久化,不需要解析。
*
* 【所以,用ObjectOutputStream把对象存入硬盘中时,不要存在txt文件下,扩展名应该是Object】
*/
//41行代码是将对象序列化,被序列化的对象必须实现Serializable接口。