xdrlib编码和解码XDR数据(4)Python文件格式(必读进阶Python教程)(参考资料)
该xdrlib
模块支持外部数据表示标准,如中所述RFC 1014,由Sun Microsystems,Inc。于1987年6月编写。它支持RFC中描述的大多数数据类型。
该xdrlib
模块定义了两个类,一个用于将变量打包到XDR表示中,另一个用于从XDR表示中解包。还有两个例外类。
- class
xdrlib.
Unpacker
(数据) Unpacker
是一个补充类,它从字符串缓冲区中解压缩XDR数据值。输入缓冲区作为数据给出。
也可以看看
- RFC 1014 – XDR:外部数据表示标准
- 此RFC定义了最初编写此模块时XDR的数据编码。它显然已被淘汰RFC 1832。
- RFC 1832 – XDR:外部数据表示标准
- 较新的RFC,提供修订的XDR定义。
Packer
包装器对象
Packer
实例有以下方法:
Packer.
get_buffer
()- 以字符串形式返回当前包缓冲区。
Packer.
reset
()- 将包缓冲区重置为空字符串。
通常,您可以通过调用适当的pack_type()
方法打包任何最常见的XDR数据类型。每个方法都使用一个参数,即要打包的值。下面简单数据类型的包装方法的支持: pack_uint()
,pack_int()
,pack_enum()
,pack_bool()
,pack_uhyper()
,和pack_hyper()
。
Packer.
pack_float
(值)- 打包单精度浮点数值。
Packer.
pack_double
(值)- 打包双精度浮点数值。
以下方法支持打包字符串,字节和不透明数据:
Packer.
pack_fstring
(n,s )- 打包固定长度的字符串,s。 n是字符串的长度,但 不会打包到数据缓冲区中。如果需要,字符串用空字节填充以保证4字节对齐。
Packer.
pack_fopaque
(n,数据)- 打包固定长度的不透明数据流,类似于
pack_fstring()
。
Packer.
pack_string
(s )- 打包一个可变长度的字符串s。首先将字符串的长度打包为无符号整数,然后打包字符串数据
pack_fstring()
。
Packer.
pack_opaque
(数据)- 打包一个可变长度的不透明数据字符串,类似于
pack_string()
。
Packer.
pack_bytes
(字节)- 打包一个可变长度的字节流,类似于
pack_string()
。
以下方法支持打包数组和列表:
Packer.
pack_list
(list,pack_item )- 打包同类商品列表。此方法对于具有不确定大小的列表很有用; 即在整个清单走完之前,尺寸不可用。对于列表中的每个项目,
1
首先打包无符号整数,然后打包列表中的数据值。 pack_item是调用以打包单个项目的函数。在列表的末尾,0
打包无符号整数。例如,要打包整数列表,代码可能如下所示:
import xdrlib p = xdrlib.Packer() p.pack_list([1, 2, 3], p.pack_int)
Packer.
pack_farray
(n,array,pack_item )- 打包一个固定长度的同类项列表(数组)。 n是列表的长度; 它没有打包到缓冲区中,但
ValueError
如果len(array)
不等于n则引发异常。如上所述,pack_item是用于打包每个元素的函数。
Packer.
pack_array
(list,pack_item )- 打包可变长度的同类项列表。首先,列表的长度打包为无符号整数,然后按照
pack_farray()
上面的方式打包每个元素 。
解包器对象
该Unpacker
课程提供以下方法:
Unpacker.
reset
(数据)- 使用给定数据重置字符串缓冲区。
Unpacker.
get_position
()- 返回数据缓冲区中的当前解包位置。
Unpacker.
set_position
(位置)- 将数据缓冲区解压缩位置设置为位置。你应该小心使用
get_position()
和set_position()
。
Unpacker.
get_buffer
()- 以字符串形式返回当前的解包数据缓冲区。
Unpacker.
done
()- 表示解包完成。
Error
如果尚未解压缩所有数据,则引发异常。
此外,每个可以用a打包的数据类型都可以用一个Packer
解压缩Unpacker
。解包方法是形式 unpack_type()
,不带参数。它们返回解压缩的对象。
Unpacker.
unpack_float
()- 解包单精度浮点数。
Unpacker.
unpack_double
()- 解压缩双精度浮点数,类似于
unpack_float()
。
此外,以下方法解压缩字符串,字节和不透明数据:
Unpacker.
unpack_fstring
(n )- 解包并返回固定长度的字符串。 n是预期的字符数。假设使用空字节填充以保证4字节对齐。
Unpacker.
unpack_fopaque
(n )- 解压缩并返回固定长度的不透明数据流,类似于
unpack_fstring()
。
Unpacker.
unpack_string
()- 解包并返回一个可变长度的字符串。首先将字符串的长度解压缩为无符号整数,然后将字符串数据解压缩
unpack_fstring()
。
Unpacker.
unpack_opaque
()- 解压缩并返回一个可变长度的不透明数据字符串,类似于
unpack_string()
。
Unpacker.
unpack_bytes
()- 解压缩并返回一个可变长度的字节流,类似于
unpack_string()
。
以下方法支持解压缩数组和列表:
Unpacker.
unpack_list
(unpack_item )- 解包并返回同类项列表。通过首先解压缩无符号整数标志,列表一次解包一个元素。如果该标志是
1
,则该项目被解压缩并附加到列表中。标志0
表示列表的结尾。 unpack_item是调用以解压缩项目的函数。
Unpacker.
unpack_farray
(n,unpack_item )- 解包并返回(作为列表)固定长度的同类项数组。 n 是缓冲区中预期的列表元素数。如上所述,unpack_item是用于解压每个元素的函数。
Unpacker.
unpack_array
(unpack_item )- 解包并返回可变长度的同类项列表。首先,将列表的长度解压缩为无符号整数,然后按
unpack_farray()
上述方式解压缩每个元素。