gpt4 book ai didi

java - Java中的自定义序列化

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:52 25 4
gpt4 key购买 nike

我有以下类(class)

class UserAccount implements Serializable
{
public String username;
public String password;

public UserAccount()
{
username = "defaultUsername";
password = "defaultPassword";
}

public UserAccount(String u, String p)
{
username = u;
password = p;
}

private void readObject(ObjectInputStream o)
throws IOException, ClassNotFoundException
{
//username = (String)o.readObject();
o.defaultReadObject();
}

private void writeobject(ObjectOutputStream o)
throws IOException, ClassNotFoundException
{
//o.defaultWriteObject();

o.writeObject(username);
}

public String toString()
{
return username + ", " + password;
}
}

我编写了以下代码片段来序列化和反序列化它的一个实例。

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("out.dat")));

out.writeObject(new UserAccount("test", "test2"));

out.close();

ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("out.dat")));

UserAccount u = (UserAccount)in.readObject();

in.close();

System.out.println(u);

我正在使用 writeObject() Hook 自定义序列化,因此,我只保留 username。但是当我读回对象时,我会进行默认的反序列化。

我期望输出为 test, null 而输出为 test, test2

基本上我希望成员 passwordnull 因为我没有坚持它。任何人都可以帮助我了解如何将密码初始化为 test2

我还验证了在反序列化期间没有对构造函数进行调用[我知道不会进行,但我还是进行了检查]。

提前致谢。

最佳答案

对变量使用transient 关键字使它们 序列化。这可能是 skaffman 答案的另一种解决方案。

引用:Why does Java have transient fields?

关于java - Java中的自定义序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com