如何在 Java 类中仅序列化极少数属性
2022-09-04 07:32:44
最近在一次采访中,我被问到一个问题:
Java类中有100个属性,我应该只能序列化其中的2个属性。这怎么可能?
标记所有98个属性不是答案,因为它效率不高。我的答案是将这些属性划分为一个单独的类,并使其可序列化。
但是我被告知,我不会被允许修改类的结构。好吧,我试图在网上论坛上找到答案,但徒劳无功。
最近在一次采访中,我被问到一个问题:
Java类中有100个属性,我应该只能序列化其中的2个属性。这怎么可能?
标记所有98个属性不是答案,因为它效率不高。我的答案是将这些属性划分为一个单独的类,并使其可序列化。
但是我被告知,我不会被允许修改类的结构。好吧,我试图在网上论坛上找到答案,但徒劳无功。
如果它是关于几个字段的,那么你总是可以将它们标记为.但是,如果你在你的searilization中需要更多的受控逻辑,那么Exetrolizable
就是答案。您可以通过实现接口的方法和方法重写序列化和反序列化过程。transient
writeExternal
readExternal
Externalizable
下面是一个小代码,用于演示如何仅序列化几个字段
public class Person implements Externalizable {
String name;
int age;
public Person() { }
Person(String name, int age) {
this.name = name;
this.age = age;
}
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(name);
//out.writeInt(age); // don't write age
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = (String) in.readObject(); // read only name and not age
}
}
答案是java的瞬态关键字。如果使类的属性暂时变,则不会对其进行序列化或反序列化。例如:
private transient String nonSerializeName;