java 反序列化 构造函数_java – 如何反序列化具有参数化构造函数的对象

您好我正在尝试反序列化以下对象.

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中有一个不安全的方法,用于在不调用构造函数的情况下分配对象.真实的故事.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值