这是我第一次进行序列化/去异步化时,我遇到了一个我无法理解的问题。 所以我有一个员工班:
public class Employee implements Serializable{
private static final long serialVersionUID = -8987739485808870716L;
public String firstName;
public String lastName;
public int phoneNumber;
public ArrayList<Skill> empSkillAry = new ArrayList<Skill>(); //
技能课程:
public class Skill implements Serializable {
private static final long serialVersionUID = 4862257193587272698L;
public int skillID;
public String skillName;
日程安排课程:
public class Schedule implements Serializable {
private static final long serialVersionUID = 781243452337862636L;
String Name;
int CsID;
public ArrayList<Skill> skillRequiredAry = new ArrayList<Skill>();
为empSkillAry和skillRequiredAry添加技能对象。如果empSkillAry包含所有skillRequiredAry对象,则可以将员工分配给班次。 让我们说,员工有技能1和时间表也有技能1.在序列化之前比较两个数组我得到一个肯定的结果,但是在反序列化后它是负面的。 我的序列化和反序列化代码有什么问题吗? 这是:
private static void deserializeAry(ArrayList arrayToDesirialize, String filePath){
try {
FileInputStream fileIn = new FileInputStream(filePath);
ObjectInputStream in = new ObjectInputStream(fileIn);
arrayToDesirialize = (ArrayList) in.readObject();
System.out.println(arrayToDesirialize);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void serializeAry(ArrayList arrayToSerialize, String filePath){
try {
FileOutputStream fileOut = new FileOutputStream(filePath);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
System.out.println(arrayToSerialize.toString());
out.writeObject(arrayToSerialize);
fileOut.close();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:4)
您的技能等级没有&#39;等于()&#39;&#39;方法。当您向两个列表添加技能时,它们都包含相同的对象,但在反序列化后它们包含具有相同内容的不同对象!如果你实现一个equals方法并与之比较而不是==它应该工作
答案 1 :(得分:2)
我假设您正在将这些数组写入不同的文件?这意味着在反序列化时将获得不同的对象。即,两个数组中的Skill
个对象都不是同一个对象。假设您实现了这种方法,它们应该是.equals
。
BTW,在你的调试器中你应该能够看到对象的id号是不同的,即使内容是相同的。