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;
}

问题

  1. 一些 “json序列化” 的库 如jackson。 这个"json序列化"只是一个口头说法还是说真的就是实实在在的序列化
  2. 如果是序列化, 那么底层是通过什么机制绕过了序列化接口的检查呢(正常输出到文件没有抛出异常)?
写回答

1回答

geelylucky

2019-01-11

同学,你好,我是geely老师的助教。

  1. 序列化是指将一个对象转换成某种数据格式,反序列化就是将某种数据格式转换为对象。

  2. Serializables只适用于java对象的序列化,ObjectMapper的原理是将java对象转换为json字符串,String对象是实现了Serializables接口的,由此便可判断实际上是对String对象做了再次的序列化。

2
2
Geely
棒棒哒~~赞
2019-01-14
共2条回复

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程