提问者:小点点

什么是数据序列化?


首先,我无法从维基百科甚至从< code>PHP手册中的serialize函数中得到它的明确定义。我需要知道一些我们需要术语序列化的情况,以及没有它事情会怎么样?换句话说,在需要序列化的地方,如果没有序列化,您的代码将会缺少一些重要的特性。


共3个答案

匿名用户

什么是序列化?

序列化将对象编码为另一种格式。
例如,你在 PHP 中有一个数组,如下所示:

$array = array("a" => 1, "b" => 2, "c" => array("a" => 1, "b" => 2));

然后您希望将其存储在文件中或发送到其他应用程序。

有几种格式可供选择,但想法是一样的:数组必须被编码(或者你可以说“翻译”)为文本或字节,可以写入文件或通过网络发送
例如,在PHP中,如果您:

$data = serialize($array);

你会得到这个:

a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";a:2:{s:1:"a";i:1;s:1:"b";i:2;}}

这是PHP理解的特定序列化格式,反之亦然,因此您可以使用它来反序列化对象。
例如,您将序列化数组存储在文件中,并希望它作为数组返回到代码中:

$array = unserialize($data);

但是您可以选择不同的序列化格式,例如JSON:

$json = json_encode($array);

会给你这个:

{"a":1,"b":2,"c":{"a":1,"b":2}}

结果不仅易于保存、人眼阅读或通过网络发送,而且几乎所有其他语言(JavaScript、Java、C#、C…)都可以理解

结论
如果您想存储或共享数据,序列化会将对象转换为另一种格式。

是否有任何情况,您不能执行任何操作,只能对其进行序列化?

不。但序列化通常会使事情变得更容易。

JSON 和 PHP 格式是唯一可能的格式吗?不,不
,不,再一次不。有很多格式。

  • XML(例如使用WSDL或XHTML等模式)
  • 字节、协议等
  • Yaml
  • 您自己的格式(您可以创建自己的序列化格式并使用它,但这是一件大事,大多数时候不值得)

匿名用户

序列化是将内存中的某些对象转换为另一种格式的过程,这种格式可用于存储在文件中或通过网络发送。反序列化是逆过程,意味着实际对象实例是从给定的对象序列化表示中恢复的。这在各种系统之间通信时非常有用。

序列化格式可以是可互操作的,也可以是不可互操作。可互操作的格式(如JSON、XML等)允许使用给定的平台序列化某些对象,并使用不同的平台反序列化。例如,对于JSON,您可以使用javascript序列化对象,并通过网络将其发送到PHP脚本,该脚本将反序列化对象并使用它。

PHP函数使用不可互操作的格式,这意味着只有PHP可以用来序列化和反序列化对象。

您可以使用< code>json_encode和< code>json_decode()函数来序列化/反序列化使用json互操作格式的PHP对象。

匿名用户

序列化是将数据(例如变量)转换为字符串等表示的过程,可以轻松地从文件或数据库中写入和读取。

用例?有很多,但通常它围绕着将复杂的嵌套数组或对象转换为可以保存和稍后读取以检索相同结构的简单字符串的想法。例如,如果您在php中有:

$blub = array();
$blub['a'] = 1;
$blub['a']['b'] = 4;
$blub['b'] = 27;
$blub['b']['b'] = 46;

与其单独遍历每个数组成员并编写它,不如:

$dataString = serialize($blub);

序列化数组可以作为一个简单的字符串写在任何地方,这样就可以再次检索这个字符串并对它执行un序列化()操作,得到与以前完全相同的数组结构。是的,真的就这么简单。