/*
* 本程序实现对象序列化和反序列化操作以及有关类集的应用。
* 对象序列化需要实现Serializable接口并通过ObjectOutputStream类对象的writeObject()实现。
* 反序列化通过ObjectInputStream类对象的readObject()实现。
* 如果要实现一对多的关系,如本例:一本书可以有多个作者,考虑使用类集。
* 常用类集的树结构:
* Collection 常用方法有:add(),remove(),iterator(),size()等
* |--List:允许有重复元素
* |--ArrayList:异步,只能用Iterator遍历
* |--Vector:同步,能用Iterator和Enumeration遍历
* |--Stack 常用方法有:push(),pop()等。
* |--Set:不允许有重复元素
* |--HashSet:散列,无序
* |--TreeSet:有序,按Comparable排序
* Map 常用方法有:put(),get()等,遍历先由 Set<Map.Entry<K,V>> entrySet()方法得到Set类集,再用Iterator得到Map.entry接口的对象,用Map.entry里的方法 getKey()和 getValue()得到相应值。
* |--HashMap:异步
* |--Hashtable:同步
* |--Properties:支持Enumeration遍历
* |--TreeMap:按key值排序
*/
package com.lwj.demo;
import java.io.*;
import java.util.*;
class Book implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private double price;
private String publisher;
private HashSet<String> author;//可能有多个作者,实现一对多
public Book(){
this.author=new HashSet<String>();
}
public Book(String name, double price, String publisher) {
this();
this.name = name;
this.price = price;
this.publisher = publisher;
}
public Boolean add(String str){
return this.author.add(str);
}
public String toString() {
Iterator<String> iter=this.author.iterator();
StringBuffer str=new StringBuffer();
while(iter.hasNext())
str.append(iter.next()+" ");
str.append("著");
return "书名:"+this.name+"/t价格:"+this.price+"元/t出版社:"+this.publisher+"/t作者:"+str;
}
}
public class SerializableDemo {
public static void main(String[] args) throws Exception{
//初始化三本书
Book book1=new Book("Java 入门",58.9,"小陆出版社");
Book book2=new Book("Java 开发指南",98.9,"新技术出版社");
Book book3=new Book("Java 实战经典",155.9,"大海出版社");
book1.add("陆武军");
book2.add("陆武军");
book2.add("刘跃军");
book3.add("李军");
book3.add("王五");
//对象序列化
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("1"));
out.writeObject(book1);
out.writeObject(book2);
out.writeObject(book3);
out.close();
//对象反序列化
ObjectInputStream in=new ObjectInputStream(new FileInputStream("1"));
Book book4=(Book)in.readObject();
System.out.println(book4);
Book book5=(Book)in.readObject();
System.out.println(book5);
Book book6=(Book)in.readObject();
System.out.println(book6);
in.close();
}
}
运行结果:
书名:Java 入门 价格:58.9元 出版社:小陆出版社 作者:陆武军 著
书名:Java 开发指南 价格:98.9元 出版社:新技术出版社 作者:陆武军 刘跃军 著
书名:Java 实战经典 价格:155.9元 出版社:大海出版社 作者:李军 王五 著