9.2 文件系统和网络的考虑
因为OS文件系统(和网络)是以字节的形式工作的,所以需要将一个对象实例变量的值表达为一个序列化的字节流。经常会使用两个步骤来将对象转换为字节,先将一个对象的状态以字符串的形式表示,然后使用Python字符串中的标准编码来进行字节转换。使用Python中内置的字符串编码功能处理这种问题很简便。
当把视线移至OS文件系统上时,可以看到设备分为两大类:块设备与字符设备。块设备也可称为可查找设备,因为OS支持在一个指定文件中对任意字节进行查找操作,它们是随机排列的。字符设备是不可查找的,它们是字节连续传输的接口。查找操作将会变得迟缓。
字符与块的区别会影响我们选择以什么方式来表达一个复杂对象或对象集合。本章所包括的序列化操作将专注于几种简单的功能:一个排序的字节流没有利用可查找设备的格式,它们将节省从字节到字符模式或块模式的流传输。
然而,在第10章“用Shelve保存和获取对象”和第11章“用SQLite保存和获取对象”中,为了对超出内存大小的对象进行编码,需要使用块模式存储。shelve模块和SQLite数据库对可查找文件的使用方式进行了扩展。
在OS中,将块模式与字符模式设备统一称为文件系统。在Python标准库中,实现了块与字符设备之间常用的底层功能集合。当使用Python的urllib.request时,可以访问网络资源以及数据的本地文件。当打开一个本地文件时,这个模块必须对可查找的文件使用字符模式的接口。
