我有一张地图:
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中放了很多信息,所以我想要的是能够在地图中放置一个新的String而不会破坏它。
我想保留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)
如果您有任何疑问或需要提供更多信息,我将乐意为您服务。
答案 0 :(得分:0)
请注意关于序列化的一些事项:
1)必须非常明智地使用它。
2)当我们序列化一个类时,就像我们正在导出它的API一样 实例变量。
3)如果我们的话,总是在您的可序列化类中明确声明SerialVersionUID
不会由JVM根据您班级的内部结构自动计算
(实例变量,公共方法等)因此改变了类的内部结构
chnages this SerialVersionUID
。
因此,如果我们在一个版本中对一个类进行serailise,然后在另一个版本中对其进行反序列化 (通过版本更改,我的意思是我们正在改变一些可序列化的内部结构 对象),版本不兼容必然会发生。
由于我不知道,我不确定您的代码究竟是什么原因造成的 你在Serializable类中做了什么chnages。
但我认为你应该考虑第3点