[英]writeObject() and readObject() are not called during serialization
我有一个Test类,如下所示:
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();
}
}
现在的问题是,当我想将Test对象序列化为JSON文件时,例如使用Gson这样的代码:
String json = new Gson().toJson(new Test());
... writeObject()和readObject()根本没有被调用,并且我得到一个带有空对象的JSON文件。 我使用Java 8。
可能是什么问题呢?
将在Java序列化上调用writeObject
和readObject
方法,该方法是将当前对象的数据转换为字节,然后将这些字节写入流中,或者从流中读取字节并从中创建对象。 您正在执行的操作是JSON序列化,而不是 Java序列化,因此根本不会使用writeObject
和readObject
方法(除非JSON编码器/解码器确定它将使用它们)。 如果您需要使用Gson自定义JSON的序列化/反序列化,则可以检查以下内容: http : //www.studytrails.com/java/json/java-google-json-custom-serializer-deserializer.jsp (不是Gson用户,因此,如果还有其他人知道如何实现此目标,请随时编辑此帖子以进行改进)
另外,您得到的结果是空的,因为Test
类中没有要序列化的字段。 请注意, num
不能被Gson序列化,因为它被标记为transient
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.