Java序列化与反序列化(Serializable)

Java序列化与反序列化(Serializable)

特别注意:

1.要序列化的类必须实现Serializable借口

2.在反序列化(读取对象)的时候必须额外捕获EOFException

3.序列化之后的文件是“乱码”

 

 

package com.frank.io;

import java.io.EOFException;
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;
/**  
 * author:pengyan   
 * date:Jun 15, 2011   
 * file:ObjectInputOutputStreamTest.java  
 */ 

public class ObjectInputOutputStreamTest {
	String path="E:\\planda.p";
	public static void main(String[] args) throws Exception {
		ObjectInputOutputStreamTest test=new ObjectInputOutputStreamTest();
		test.outputObject();
		test.inputObject();
	}
	private void inputObject() throws Exception {
		//create inputObjectStream
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream(path));
		// temp object to receive the value of this stream read everytime
		Object obj=null;
		PandaEntity p=null;
		try {
			while((obj=ois.readObject())!=null){
				p=(PandaEntity)obj;
				//show the object read by the stream
				System.out.println(p.toString());
			}
		} catch (EOFException e) {
			//throw EOFException when read end
			System.err.println("读取完毕");
		}
	}
	private void outputObject() throws Exception{
		//create two object to output
		PandaEntity p1=new PandaEntity(1000,"团团",3);
		PandaEntity p2=new PandaEntity(2000,"圆圆",3);
		//create the output stream
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(path));
		//write object
		oos.writeObject(p1);
		oos.writeObject(p2);
		//flush the stream
		oos.flush();
		//close the stream
		oos.close();
	}
}
class PandaEntity implements Serializable{
	/*the class must implements Serializable interface
	 * or there will throw java.io.NotSerializableException 
	 * */
	private Integer id;
	private String name;
	private Integer age;
	@Override
	public String toString() {
		return "id:"+id+"\tname:"+name+"\tage:"+age;
	}
	public PandaEntity() {
	}
	public PandaEntity(Integer id, String name, Integer age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}

 

posted @ 2014-07-25 10:36  哈特中尉  阅读(550)  评论(0编辑  收藏  举报