首页 > 解决方案 > 不是所有的对象都已经序列化了吗?

问题描述

我已经在很多地方阅读了序列化的定义。他们似乎都说这是一种将对象(在 Java 或 Python 等 OOP 语言中)转换为字节流的方法。

不是所有的对象在最基本的层面上都已经以字节流的形式存在了吗?或者当我们将任何内容保存到任何磁盘时,是否所有内容都已经只是 1 和 0 被保存并且稍后会被读取?什么不是字节流?什么是将对象转换为相应的字节流?

标签: javaserializationpython-3.7

解决方案


是的,程序中的每个对象都已经由内存中某处的某种位表示。

但在一般情况下,您不能只获取这些位,将它们复制到另一个进程并期望它们工作。

这种表示高度依赖于 (a) JVM的当前状态和 (b)您正在运行的 Java 版本,以及 (c) 对象是否 由JIT编译。一些位可能在几个对象之间共享。不必所有位都彼此相邻。有些可能会被交换到某个硬盘上。出于优化原因,同一对象的多个副本可能处于稍微不同的状态(一个在处理器缓存中,一个在二级缓存中,一个在RAM中,一个在磁盘上)。

序列化为您提供了对象图的明确定义的位表示,因此您实际上可以在不同的过程中使用它。


推荐阅读