gpt4 book ai didi

java - 序列化期间不调用 writeObject() 和 readObject()

转载 作者:行者123 更新时间:2023-11-30 08:07:20 25 4
gpt4 key购买 nike

我有一个测试类,如下所示:

package examples;

import java.io.IOException;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;

public class Test implements Serializable {

private static final long serialVersionUID = -2174245110865129519L;

private transient int num = 5;

/**
* Write object (Serialization).
*/
private void writeObject(ObjectOutputStream out) throws IOException {
System.out.println("Write Test!");
// Save state.
out.defaultWriteObject();
// Save sum.
out.writeObject(num);
}

/**
* Read object (Deserialization).
*/
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
System.out.println("Read Test!");
// Restore state.
in.defaultReadObject();
// Restore num.
num = (int) in.readObject();
}

}

现在的问题是,当我想将一个测试对象序列化为一个 JSON 文件时,例如 Gson像这样:

String json = new Gson().toJson(new Test());

... writeObject() 和 readObject() 根本没有被调用,我得到一个包含空对象的 JSON 文件。我使用 Java 8。

可能是什么问题?

最佳答案

writeObjectreadObject 方法将在 Java Serialization 上调用,它将当前对象的数据转换为字节并将这些字节写入流中,或者读取字节从流中创建一个对象。你在那里做的是 JSON 序列化,不是 Java 序列化,所以根本不会使用 writeObjectreadObject 方法(除非 JSON 编码器/解码器确定它将使用它们)。如果需要使用Gson自定义JSON的序列化/反序列化,可以查看:http://www.studytrails.com/java/json/java-google-json-custom-serializer-deserializer.jsp (不是 Gson 用户,所以如果有其他人知道如何实现这一点,请随时编辑这篇文章以改进它)

此外,您得到的结果是空的,因为在您的 Test 类中没有要序列化的字段。请注意 num 不能被 Gson 序列化,因为它被标记为 transient

关于java - 序列化期间不调用 writeObject() 和 readObject(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766146/

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