java - 对象转字节数组 vs 字符串转字节数组
天蓬老师
天蓬老师 2017-04-17 13:11:50
[Java讨论组]

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
ringa_lee

差一个序列化操作

怪我咯

这个问题其实还是要看 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 方法才是真正实现。

从实现中可以看出,该方法 是通过 writeString 方法实现写入序列。

字符串作为char数组类型的封装实现在序列化的时候被特殊对待了。

再来看看 writeString 的源码

可以看到 string 被当做一种原始数据,采用类似 DataOutputStream 的处理方式写入到了序列。 String 被当成数据写出,而不是结构化对象。

说道这儿来,就不需要往下追踪了。题主大概也知道怎么回事了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号