1

私は地図を持っています:

Map<String, DistributorAdd> map= new TreeMap<String, DistributorAdd>();

そしてそれをfile.txtに保存します

FileOutputStream  fos = new FileOutputStream("Distrib.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(map);
        oos.close();

問題は、昨日のディストリビューターが次のようになっていることです。

public DistributorAdd(String distributor, String 
        emailAdress, String name, String speciality){...}

明日は次のようになります。

public void ajouter(String Distributor, String EmailAdress, 
    String Name, String Phone, String Image) {..}

私の同僚はすでに多くの情報を Distrib.txt に配置しているので、私が望むのは、マップを破壊せずに新しい文字列を配置できるようにすることです。

Distrib.txt を保持したいのですが、私の DistributorAdd 関数を保持するための簡単な手順はありますか?

私が得るエラーの種類は次のとおりです。

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Distrib.txt"));
VendorA = (DistributorAdd) ois.readObject();

エラー:

IOException : table.java => table()java.io.StreamCorruptedException: invalid stream header: ACED0573
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
at car.Table.<init>(Table.java:185)
at car.Table.main(Table.java:837)

ご不明な点やご不明な点がございましたら、お気軽にお問い合わせください。

4

1 に答える 1

0

シリアル化については、次の点に注意してください。

1) 非常に慎重に使用する必要があります。

2) クラスをシリアル化すると、インスタンス変数に関してその API をエクスポートするようになります。

3)シリアル化可能なクラスで常に明示的に宣言SerialVersionUIDします。そうしないと、クラスの内部構造(インスタンス変数、パブリックメソッドなど)に基づいてJVMによって自動的に計算されるため、クラスの内部構造を変更すると、これが変更されますSerialVersionUID

したがって、あるバージョンでクラスをシリアル化し、別のバージョンで逆シリアル化すると (バージョンの変更とは、シリアル化可能なオブジェクトの内部構造を変更することを意味します)、バージョンの非互換性が発生することは間違いありません。

Serializable クラスでどのような変更を行っているのかわからないため、コードが失敗した原因が正確にはわかりません。

しかし、ポイント3を一度検討する必要があると思います

于 2013-04-12T08:34:13.010 に答える