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;
}