您好我正在尝试反序列化以下对象.
public class Book extends Item implements Serializable {
public Boolean isBook;
public Boolean isBookch;
private String publicationPlace;
private String publisher;
private int edition;
private String pages;
private String article;
Book(String title, String author, String year)
{
super(title, author, year);
isBook = false;
isBookch = false;
publicationPlace = " !!! Not Known !!! ";
publisher = " !!! Not Known !!! ";
edition = 1;
pages = "!!! Not Known !!!";
article = " !!! Not Known !!! ";
}
这是对象的结构,我正在把它作为……
openw("books.dat");
Date date = new Date ();
out.writeObject(date);
for(Book b : books )
out.writeObject ( b );
closew();
这个工作得很好,没有任何错误.
我试着把它分散为……
openr("books.dat");
Date lastsaved = (Date)in.readObject();
System.out.println("last saved date : " + lastsaved.toString());
while( true )
{
Object o = in.readObject();
if(o == null )
break;
else
{
addItem((Book)o);
books.add((Book)o);
}
}
closer();
这给出了错误:java.io.InvalidClassException:Book;没有有效的构造函数
如何清除这个问题.. thanx提前…
最佳答案 类Item也必须实现Serializable,
class Item implements Serializable {
// ...
}
它的工作原理!
但是,如果Item不在您的范围内并且没有非参数构造函数,则无法使Book可序列化.使非序列化类的子类可序列化的唯一方法是找到“第一个非可序列化超类的子类可访问的无参数构造函数”(引自ObjectStreamClass的getSerializableConstructor方法的源代码).在您的情况下似乎缺少哪些,因此Book无法进行序列化.
在这种情况下,无论如何,只要您的对象由基元组成,您就可以将JSON视为序列化对象的替代方法.在http://www.json.org上有一个Java的JSON库列表
NB,Java如何在不调用构造函数的情况下创建可序列化类的对象?在Java的API中有一个不安全的方法,用于在不调用构造函数的情况下分配对象.真实的故事.