写这一个是因为如果类的成员变量比较复杂,那么使用clone()方法显然不是很好
于是我们考虑了一下使用序列化对象,下面简单的讲解一下什么叫序列化对象
一种处理对象流的机制,对象流即将对象的内容流化,让对象可以进行读写操作
序列化是为了解决对象在进行读写操作是产生的问题
序列化的实现
被序列化的类需要继承Serializable接口,该接口没有实现方法,实现该节口只是为
了标记该对象可以被序列化
序列化简单的说是把java对象存储在某个地方,以便于传输
下面是有关代码的实现
首先是创建一个Love类
import java.io.Serializable;
public class Love implements Serializable{
public String people;
public int number;
public Love (String people,int number)
{
this.people=people;
this.number=number;
}
public String getPeople() {
return people;
}
public void setPeople(String people) {
this.people = people;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return people+"-----"+number;
}
}
然后是创建一个Employer 类
import java.io.Serializable;
public class Employer implements Serializable{
private String name;
private int age;
private Love love;
public Employer(String name,int age,Love love)
{
this.name=name;
this.age=age;
this.love=love;
}
public Love getLove() {
return love;
}
public void setLove(Love love) {
this.love = love;
}
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;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name+"-------"+age+"-----"+love;
}
}
最后创建Demo这个测试类
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Love love= new Love("刘美女",23);
Employer e1=new Employer("雇主1",38,love);
System.out.println("输出雇主信息");
System.out.println(e1);
System.out.println("序列化之后");
ObjectOutputStream oos=null;
ObjectInputStream ois=null;
Employer e2=null;
try {
oos=new ObjectOutputStream(new FileOutputStream("employer.bat")); //创建输出流
ois=new ObjectInputStream(new FileInputStream("employer.bat")); //创建输入流
//写入对象到employer.bat中
oos.writeObject(e1);
//读出employer.bat文件中的对象
e2=(Employer) ois.readObject();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(oos!=null)
{
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ois!=null)
{
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if(e2!=null)
{
//对e2的内容进行修改
e2.setAge(29);
e2.setName("雇主2");
e2.getLove().setNumber(18);
e2.getLove().setPeople("迪美女");
System.out.println("输出e2对象的内容");
System.out.println(e2);
System.out.println("-------");
System.out.println("输出e1对象的内容");
System.out.println(e1);
}
}
}
需要留意的是你也可以将对象写入到内存中