我想在文件中以名称值字符串格式序列化POJO。当我读回字符串时,我希望POJO回来。我只能想到为这个自定义序列化实现writeReplace()和readResolve()方法。还有其他/更好的方法吗?
假设我的POJO是这样的
class myPOJO(){
private String attribute1;
private String attribute2;
public myPOJO(String value1, String value2){
attribute1 = value1;
attribute2 = value2;
}
public String getAttribute1(){
return attribute1;
}
public void setAttribute1(String value){
attribute1 = value;
}
public String getAttribute2(){
return attribute2;
}
public void setAttribute2(String value){
attribute2 = value;
}
}
所以我希望将它以字符串格式序列化为
{attribute1:value1;attribute2:value2}
答案 0 :(得分:3)
对于自定义java序列化, 您应该看一下覆盖readObject()和writeObject()方法。如果覆盖了这些方法,则Serialization api会调用这些方法而不是执行默认的序列化。 readResolve()和writeReplace()方法具有不同的用法,例如当你序列化单例时,你需要readResolve()来反序列化。 请参阅JDK(arrayList)
中的以下实际示例但是,如果POJO的物理表示与逻辑表示相同,那么您也可以使用默认序列化而不会出现任何问题。
对于您的上述POJO,您可以按以下方式执行序列化
class myPOJO implements Serializable{
private static final long serialVersionUID = 8683452581122892189L;
transient private String attribute1;
transient private String attribute2;
public myPOJO(String value1, String value2){
attribute1 = value1;
attribute2 = value2;
}
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{
//always do defaultWriteObject. Helps in few Edge cases
s.defaultWriteObject();
s.writeObject(attribute1);
s.writeObject(attribute2);
}
private void readObject(java.io.ObjectInputStream s) throws java.io.IOException{
//always do defaultReadObject. Helps in few Edge cases.
s.defaultReadObject();
attribute1 = (String) s.readObject();
attribute2 = (String) s.readObject();
}
public String getAttribute1(){
return attribute1;
}
public void setAttribute1(String value){
attribute1 = value;
}
public String getAttribute2(){
return attribute2;
}
public void setAttribute2(String value){
attribute2 = value;
}
}