开发者社区> 问答> 正文

结构化数据(对象)转字节数组和字符串转字节数组的原理有什么区别?

如题,结构化数据(对象)转字节数组和字符串转字节数组的原理有什么区别?

展开
收起
蛮大人123 2016-02-28 15:12:19 2942 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    这个问题其实还是要看 java ObjectOutputStream 源代码。
    我们都知道 序列化类需要 被序列化的类实现 java.io.Serializable 类
    然后使用 ObjectOutputStream 类的 writeObject 方法来将对象转换成流。
    从ObjectOutputStream源码的描述大概得知其序列化的方式。
    默认序列化机制:

    序列化的是对象的类,类签名,和所有非瞬态和非静态字段的值同时包括对其他对象的引用(瞬态和静态字段除外)也会导致写入序列。单个对象的多个引用被使用引用共享机制编码。
    英文大意,翻译的不准,最好自己读原文

    按理论来说 java 的所有类型的实例都是对象,原始数据类型外(Primitive data types)
    writeObject 方法并不是 真正的发生写入的方法。

    /**
         * Underlying writeObject/writeUnshared implementation.
         */
        private void writeObject0(Object obj, boolean unshared)

    writeObject0 方法才是真正实现。
    screenshot
    从实现中可以看出,该方法 是通过 writeString 方法实现写入序列。
    字符串作为char数组类型的封装实现在序列化的时候被特殊对待了。
    再来看看 writeString 的源码
    screenshot
    可以看到 string 被当做一种原始数据,采用类似 DataOutputStream 的处理方式写入到了序列。 String 被当成数据写出,而不是结构化对象。

    2019-07-17 18:49:39
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载