接着我修改这两个类。首先 SaveReadOwn 类我不做save 处理,我只想把 “楼上的代码” 里保存的对象反序列化回来。 代码如下:package com.test.serialization; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SaveReadOwn { public static void main(String args[]) { SaveReadOwn s = new SaveReadOwn();
Own myself = null;//new Own();
// myself.setNo(272); // myself.setName("HIBZWM"); // myself.setSex("man"); // change my name // s.save(myself); // myself.setName("other"); // System.out.println("change myname to : " + myself.getName()); //read object myself = (Own)s.read("foo.ser");
System.out.println("saved object : myName = " + myself.getName()); } // save public void save(Own foo) { try { FileOutputStream fos = new FileOutputStream("foo.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(foo); fos.close(); } catch(Exception e) { e.printStackTrace(); } } //read public Object read(String objPath) { Object foo = null; try { FileInputStream fis = new FileInputStream(objPath); ObjectInputStream ois = new ObjectInputStream(fis); foo = ois.readObject(); ois.close(); fis.close(); } catch(Exception e) { e.printStackTrace(); } return foo; } } 此时我只修改了 用来读取对象的类,然后执行,结果你自己试试。接着,我把类 Own 修改一下,加一个字段 private final int test = 0;package com.test.serialization; public class Own implements java.io.Serializable { private int no = 272; private String name = "bzwm"; private String sex = "man"; private final int test = 0; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }然后你再执行一下,就会报错了。 类似 这样的信息: java.io.InvalidClassException: com.test.serialization.Own; local class incompatible: stream classdesc serialVersionUID = 7794841109938881749, local class serialVersionUID = 6646693911615467598 继续修改类 Own,加一个字段:private static final long serialVersionUID = 7794841109938881749l;(强制修改uid)
package com.test.serialization;public class Own implements java.io.Serializable { private int no = 272; private String name = "bzwm"; private String sex = "man"; private final int test = 0;private static final long serialVersionUID = 7794841109938881749l;public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }再执行,看结果吧。
给你举个例子。想要序列化的对象:
Class 名是:Own,实现了java.io.Serializable
package com.test.serialization;public class Own implements java.io.Serializable
{
private int no = 272;
private String name = "bzwm";
private String sex = "man";public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getNo()
{
return no;
}
public void setNo(int no)
{
this.no = no;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
}
然后用Class SaveReadOwn 来保存对象,再把它读出来。package com.test.serialization;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SaveReadOwn
{
public static void main(String args[])
{
SaveReadOwn s = new SaveReadOwn();
Own myself = new Own();
myself.setNo(272);
myself.setName("HIBZWM");
myself.setSex("man");
// change my name
s.save(myself);
myself.setName("other");
System.out.println("change myname to : " + myself.getName());
//read object
myself = (Own)s.read("foo.ser");
System.out.println("saved object : myName = " + myself.getName());
}
// save
public void save(Own foo)
{
try
{
FileOutputStream fos = new FileOutputStream("foo.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(foo);
fos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//read
public Object read(String objPath)
{
Object foo = null;
try
{
FileInputStream fis = new FileInputStream(objPath);
ObjectInputStream ois = new ObjectInputStream(fis);
foo = ois.readObject();
ois.close();
fis.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return foo;
}
}运行结果自己看吧。
代码如下:package com.test.serialization;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SaveReadOwn
{
public static void main(String args[])
{
SaveReadOwn s = new SaveReadOwn();
Own myself = null;//new Own();
// myself.setNo(272);
// myself.setName("HIBZWM");
// myself.setSex("man");
// change my name
// s.save(myself);
// myself.setName("other");
// System.out.println("change myname to : " + myself.getName());
//read object
myself = (Own)s.read("foo.ser");
System.out.println("saved object : myName = " + myself.getName());
}
// save
public void save(Own foo)
{
try
{
FileOutputStream fos = new FileOutputStream("foo.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(foo);
fos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//read
public Object read(String objPath)
{
Object foo = null;
try
{
FileInputStream fis = new FileInputStream(objPath);
ObjectInputStream ois = new ObjectInputStream(fis);
foo = ois.readObject();
ois.close();
fis.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return foo;
}
}
此时我只修改了 用来读取对象的类,然后执行,结果你自己试试。接着,我把类 Own 修改一下,加一个字段 private final int test = 0;package com.test.serialization;
public class Own implements java.io.Serializable
{
private int no = 272;
private String name = "bzwm";
private String sex = "man";
private final int test = 0;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getNo()
{
return no;
}
public void setNo(int no)
{
this.no = no;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
}然后你再执行一下,就会报错了。
类似 这样的信息:
java.io.InvalidClassException: com.test.serialization.Own; local class incompatible: stream classdesc serialVersionUID = 7794841109938881749, local class serialVersionUID = 6646693911615467598
继续修改类 Own,加一个字段:private static final long serialVersionUID = 7794841109938881749l;(强制修改uid)
package com.test.serialization;public class Own implements java.io.Serializable
{
private int no = 272;
private String name = "bzwm";
private String sex = "man";
private final int test = 0;private static final long serialVersionUID = 7794841109938881749l;public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getNo()
{
return no;
}
public void setNo(int no)
{
this.no = no;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
}再执行,看结果吧。