Java 序列化对象时,如何防止特定成员的序列化?
我有一个实现的类。当我序列化该类的成员时,我不希望在序列化表示中包含某些变量/方法 考虑一个Java 序列化对象时,如何防止特定成员的序列化?,java,serialization,Java,Serialization,我有一个实现的类。当我序列化该类的成员时,我不希望在序列化表示中包含某些变量/方法 考虑一个名称可序列化的类: class Name implements Serializable { private String firstName; private String middleName; private String lastName; ... } 假设我希望每个实例的序列化形式排除middleName属性 是否有任何方法可以将特定属性和方法排除在对象的序列
名称
可序列化的类:
class Name implements Serializable {
private String firstName;
private String middleName;
private String lastName;
...
}
假设我希望每个实例的序列化形式排除middleName
属性
是否有任何方法可以将特定属性和方法排除在对象的序列化表示中?只需将它们定义为瞬态
private String serializedField; // gets serialized
private transient String field; // doesn't get serialized
transient关键字在不希望序列化的变量之前使用 例如 而且瞬态方法也不能仅用于变量 我有什么办法可以做到这一点吗 是有一种方法。你正在寻找一个暂时的。像这样
private transient x;
若要将您创建的所有对象变量添加到其中,将转换为持久状态。因此,当您将这些变量声明为瞬态变量时,它将不会被持久化。这就是transient关键字的主要用途
从:
变量可以标记为瞬态,以表明它们不是一部分
对象的持久状态
:
//输出将为:
First Name : Steve
Middle Name : null
Last Name : Jobs
要将成员从序列化中排除,请将其定义为
瞬态
例如
b
将不会在此类中序列化。在数据成员之前声明瞬态或静态,以排除该特定数据成员的序列化我认为此问题被错误地关闭为“太宽”,但我认为是可能的重复
package javabeat.samples;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class NameStore implements Serializable{
private String firstName;
private transient String middleName;
private String lastName;
public NameStore (String fName,
String mName,
String lName){
this.firstName = fName;
this.middleName = mName;
this.lastName = lName;
}
public String toString(){
StringBuffer sb = new StringBuffer(40);
sb.append("First Name : ");
sb.append(this.firstName);
sb.append("Middle Name : ");
sb.append(this.middleName);
sb.append("Last Name : ");
sb.append(this.lastName);
return sb.toString();
}
}
public class TransientExample{
public static void main(String args[]) throws Exception {
NameStore nameStore = new NameStore("Steve",
"Middle","Jobs");
ObjectOutputStream o = new ObjectOutputStream
(new FileOutputStream("nameStore"));
// writing to object
o.writeObject(nameStore);
o.close();
// reading from object
ObjectInputStream in =new ObjectInputStream(
new FileInputStream("nameStore"));
NameStore nameStore1 = (NameStore)in.readObject();
System.out.println(nameStore1);
}
}
First Name : Steve
Middle Name : null
Last Name : Jobs
public class A extends Serializable {
private int a;
private transient int b;
}