24-IO流-55-IO流(ObjectOutputStream-对象的序列化)

来源:互联网 发布:rekordbox软件的作用 编辑:程序博客网 时间:2024/06/03 13:20
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接口。


0 0
原创粉丝点击