0

以下のクラスでオブジェクトをファイルに保存しようとしていますが、java.io.NotSerializableException が発生します。

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Calendar;

class Saver {

  Calendar cal = Calendar.getInstance();

  public void save(ArrayList<Product> products) {
    for (int i = 0; i < products.size(); i++) {
      try { 
        FileOutputStream saveFile = new FileOutputStream(
        "/" + products.get(i) + ".product"
        );

        ObjectOutputStream oos = new ObjectOutputStream(saveFile);
        oos.writeObject(products.get(i));
      } catch(Exception ex) {
        System.out.println(ex); 
      }
    }
  }

}

クラス Product は次のようになります。

class Product {

  private String title;
  private int id;
  private double price;

  public Product(String title, int id, double price) {
    this.title = title;
    this.id = id;
    this.price = price;
  }

  public String getTitle() {
    return title;
  }

  public int getId() {
    return id;
  } 

  public double getPrice() {
    return price;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public void setId(int id) {
    this.id = id;
  }

  public void setPrice(double price) {
    this.price = price;
  }

}

私は何を間違っていますか?どうすればオブジェクトをファイルに保存できますか? 前もって感謝します!

4

2 に答える 2

5

Serializable状態を保存するクラスのマーカー インターフェイスであるインターフェイスを実装して、Product クラスをシリアル化する必要があります。

class Product implements Serializable {

Java でのオブジェクトのシリアル化のチュートリアル リンク

于 2012-12-25T11:08:59.430 に答える
3

例外が示すように、クラス (Productこの場合) はシリアル化できません。おそらく、この変更でうまくいくでしょう:

class Product implements Serializable {
     // Code as before
}

serialVersionUIDただし、バージョン管理のためにフィールドを宣言することも検討する必要があります。詳細については、ドキュメントSerializableとシリアライゼーションのチュートリアルお読みください。新しいメンバーを記述する必要はありません。これは単なるマーカー インターフェイスです。ただし、シリアライゼーションとデシリアライゼーションをより詳細に制御するために追加できるメソッドは他にもあります。

代替のシリアル化アプローチも検討する必要があります-個人的にはGoogle Protocol Buffersが好きですが、偏っています:)必要なバージョン管理とクロスプラットフォームサポートを検討してください。

さらに:

  • ファイル名に暗黙的に使用Product.toString()していますが、それでは何も役に立ちません。ファイル名は何に基づいて作成しますか?
  • あなたは何もしていませんcal- 現在の日付/時刻をどのように保存しますか?
于 2012-12-25T11:09:25.813 に答える