我有一个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。
可能是什么问题?
答案 0 :(得分:2)
readObject
和writeObject
方法,Java Serialization将当前对象的数据转换为字节并将这些字节写入流中,或者从流中读取字节并创建从那里的对象。您在那里做的是JSON序列化,不是 Java序列化,因此根本不会使用readObject
和Test
方法(除非JSON编码器/解码器确定它将使用它们)。如果你需要使用Gson自定义JSON的序列化/反序列化,你可以检查一下:http://www.studytrails.com/java/json/java-google-json-custom-serializer-deserializer.jsp(不是Gson用户,所以如果有其他人知道如何实现这一点,请随意编辑这篇文章以改进它)
此外,由于您的num
课程中没有要序列化的字段,因此您获得的结果为空。请注意,Gson无法序列化transient
,因为它标记为library(IRanges)
#build an appropriate object
dat = RangedData(space = dfin$chr,
IRanges(dfin$start, dfin$end),
sample = dfin$sample,
type = dfin$type)
dat
#concatenate overlaps with an extra step of saving the concatenation mappings
ans = RangedData(reduce(ranges(dat), with.revmap = TRUE))
ans
。