hi~老师突然有个序列化的问题想不明白想请教一下
来源:7-1 建造者模式讲解
街边七号
2019-01-11
最开始接触的对象序列化就是使用ObjectOutputStream直接调用writeObject方法将实例对象序列化。 后来又接触一些 称为 “json序列化” 的库 (此处使用的是jackson)
我的类情况如下
class A implements Serializables {String a; B b;}
class B {String b;}
main() {
B b = new B(“b);
A a = new A(“a”, b);
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(”./serializable.txt")
);
// 使用jackson的情况不会出错
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, a);
// 直接使用ObjectOutputStream序列化,会抛出异常。明确说明
B类未实现序列化接口无法进行序列化
out.writeObject(a); //异常, B类未实现序列化接口
out.close;
}
问题
- 一些 “json序列化” 的库 如jackson。 这个"json序列化"只是一个口头说法还是说真的就是实实在在的序列化
- 如果是序列化, 那么底层是通过什么机制绕过了序列化接口的检查呢(正常输出到文件没有抛出异常)?
1回答
-
同学,你好,我是geely老师的助教。
序列化是指将一个对象转换成某种数据格式,反序列化就是将某种数据格式转换为对象。
Serializables只适用于java对象的序列化,ObjectMapper的原理是将java对象转换为json字符串,String对象是实现了Serializables接口的,由此便可判断实际上是对String对象做了再次的序列化。
222019-01-14
相似问题