Python 面试题:序列化与反序列化
为什么要序列化
- 因为TCP/IP协议只支持字节数组的传输,不能直接传对象。对象序列化的结果一定是字节数组!当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。
序列化是什么
- 把内存中的对象变为可以可存储或传输的字节流的过程叫做序列化
反序列化是什么
- 把字节流恢复为 python 对象的过程
支持序列化的库有哪些
pickle
- pickle 模块所使用的这种序列化格式本身就没有考虑过安全问题。这种格式会把原有的Python对象记录下来,让系统可以在稍后予以重建。这意味着,假如记录的这个对象本身含有恶意行为,那么通过反序列化还原出来之后,就有可能破坏整个程序。
- pickle 适用的对象
json
- json 模块考虑到了安全问题。序列化之后的JSON数据表示的只不过是一套对象体系而已
dill
- pickle 的加强版,可以序列化 python 中的几乎所有东西。
浙公网安备 33010602011771号