我想在文件中以名称值字符串格式序列化一个 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}
最佳答案
对于自定义java序列化, 您应该查看重写 readObject() 和 writeObject() 方法。如果这些方法被覆盖,Serialization api 将调用这些方法而不是执行默认的 Serialization。 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;
}
关于java - 以自定义的可序列化形式存储对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308880/