0

インスタンス化されたクラス、オブジェクトをファイルに出力する方法を探しています。FileStream を使用してみましたが、機能していないようです。調べてみると「シリアル化」という手法が必要なようです。私はこのトピックについて完全に迷っています。誰かが私のためにこのコードをデバッグしてくれませんか? 通常のクラス内で抽象クラスをシリアル化しようとしているため、問題が発生しているという予感があります。抽象クラスは java.util.Calendar です。

class CalendarL implements java.io.Serializable{
    private static final long serialVersionUID = 1L;

    java.util.Calendar calendar;

    CalendarL (int date, int month, int year){
        calendar.set (Calendar.DATE, date);
calendar.set (Calendar.MONTH, month);
calendar.set (Calendar.YEAR, year);
    }
}

class IO {
    protected CalendarL reader() throws IOException, ClassNotFoundException{
        FileInputStream data = new FileInputStream("data.dat");
        ObjectInputStream dataObject = new ObjectInputStream(data);

        CalendarL calendar = (CalendarL)dataObject.readObject();

        dataObject.close();
        data.close();

        return calendar;
    }


    protected void output(CalendarL calendar) throws IOException, WriteAbortedException, NotSerializableException {
        new FileOutputStream("data.dat").close();

        FileOutputStream data = new FileOutputStream("data.dat");
        ObjectOutputStream dataObject = new ObjectOutputStream(data);

        dataObject.writeObject(calendar);
        dataObject.close();
        data.close();
   }

}

これは私が得るエラーです:

Exception in thread "main" java.io.NotSerializableException: hotelres.ClientL
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
4

1 に答える 1

2

通常のクラス内で抽象クラスをシリアル化しようとしているため、問題が発生しているという予感があります。抽象クラスはjava.util.Calendarです。

その予感は正しくありません。インスタンス(クラスではない)をシリアル化すると、インスタンスのクラスを抽象クラスにすることはできません。その上、Calendarクラス実装しSerializableます...javadocはそう言います。

于 2012-06-18T04:08:59.570 に答える