在java中打开序列化对象时出现InvalidClassException

时间:2013-01-11 04:35:58

标签: serialization

好的,所以我有一个我要保存的类Region对象。我创建了Region,Region类中的所有类都实现了Serializable。我的保存方法工作得非常好但是当我尝试使用以下方法打开保存的文件时:

// ----------------------------------------------------------
/**
 * Open a Region object with the given fileName.
 *
 * @param fileName
 * @return The desired Region object.
 */
public static Region openRegion(String fileName)
{
    try
    {
        FileInputStream fis = new FileInputStream(fileName + ".txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object readObject = ois.readObject();
        ois.close();

        if (readObject != null && readObject instanceof Region)
        {
            return (Region)readObject;
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    catch (ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    return null;
}

但后来我收到以下错误:java.io.InvalidClassException:htm.model.Cell;没有有效的构造函数     at java.io.ObjectStreamClass $ ExceptionInfo.newInvalidClassException(Unknown Source)     在java.io.Object.StreamClass.checkDeserialize(未知来源)

Cell对象是Region对象中的一个类,但它有一个类似于以下内容的构造函数: public Cell(Column column,int columnIndex)     {         super(column,columnIndex);         this.predictionSteps = 0;         this.predictingState = false;         this.previousPredictingState = false;         this.learningState = false;         this.previousLearningState = false;         this.listOfDistalSegments = new ArrayList(5);     }

很抱歉这个问题很长,但我不知道我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

Cell的最近的非序列化基类必须有一个公共的无参数构造函数。