On this page
xdrlib —编码和解码 XDR 数据
源代码: Lib/xdrlib.py
xdrlib模块支持 1987 年 6 月由 Sun Microsystems,Inc.编写的 RFC 1014中描述的外部数据表示标准。它支持 RFC 中描述的大多数数据类型。
xdrlib模块定义了两个类,一个用于将变量打包为 XDR 表示形式,另一个用于从 XDR 表示中解包。还有两个异常类。
类别
xdrlib.
Packer
类别
xdrlib.
Unpacker
(数据)Unpacker
是互补类,用于从字符串缓冲区解包 XDR 数据值。Importing 缓冲区以* data *形式给出。
See also
Packer Objects
Packer个实例具有以下方法:
Packer.
get_buffer
( )- 以字符串形式返回当前包缓冲区。
Packer.
reset
( )- 将包缓冲区重置为空字符串。
通常,可以pass调用适当的pack_type()
方法来打包任何最常见的 XDR 数据类型。每个方法采用一个参数,即要打包的值。支持以下简单的数据类型打包方法:pack_uint()
,pack_int()
,pack_enum()
,pack_bool()
,pack_uhyper()
和pack_hyper()
。
Packer.
pack_float
(* value *)- 打包单精度浮点数* value *。
Packer.
pack_double
(* value *)- 打包双精度浮点数* value *。
以下方法支持打包字符串,字节和不透明数据:
Packer.
pack_fstring
(* n , s *)- 打包一个固定长度的字符串* s *。 * n *是字符串的长度,但不打包在数据缓冲区中。如有必要,可使用空字节填充字符串,以确保 4 字节对齐。
Packer.
pack_fopaque
(* n , data *)- 打包固定长度的不透明数据流,类似于pack_fstring()。
Packer.
pack_string
(* s *)- 打包一个可变长度的字符串* s *。字符串的长度首先打包为无符号整数,然后使用pack_fstring()打包字符串数据。
Packer.
pack_opaque
(* data *)- 打包一个可变长度的不透明数据字符串,类似于pack_string()。
Packer.
pack_bytes
(* 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 *)- 打包固定长度的同类项目列表(* array *)。 * n 是列表的长度;它没有被包装到缓冲区中,但是如果
len(array)
不等于 n ,则会引发ValueError异常。如上所述, pack_item *是用于打包每个元素的函数。
- 打包固定长度的同类项目列表(* array *)。 * n 是列表的长度;它没有被包装到缓冲区中,但是如果
Packer.
pack_array
(* list , pack_item *)- 包装可变长度的同类项目列表。首先,将列表的长度打包为无符号整数,然后按照上面的pack_farray()打包每个元素。
Unpacker Objects
Unpacker类提供以下方法:
Unpacker.
reset
(* data *)- 使用给定的* data *重置字符串缓冲区。
Unpacker.
get_position
( )- 返回数据缓冲区中的当前拆包位置。
Unpacker.
set_position
(* position *)- 将数据缓冲区解压缩位置设置为* position *。您应谨慎使用get_position()和set_position()。
Unpacker.
get_buffer
( )- 以字符串形式返回当前的解压缩数据缓冲区。
Unpacker.
done
( )- 表示解包完成。如果尚未解压缩所有数据,则引发Error异常。
此外,可以用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 *)- 解包并返回同类项目列表。pass首先解压缩无符号整数标志来一次将列表解压缩一个元素。如果标志是
1
,那么将解压缩该项目并将其附加到列表中。标志0
表示列表的末尾。 * unpack_item *是用来解压缩项目的函数。
- 解包并返回同类项目列表。pass首先解压缩无符号整数标志来一次将列表解压缩一个元素。如果标志是
Unpacker.
unpack_farray
(* n , unpack_item *)- 解包并返回固定长度的同类项目数组(作为列表)。 * n 是缓冲区中期望的列表元素数。如上所述, unpack_item *是用于解压缩每个元素的函数。
Unpacker.
unpack_array
(* unpack_item *)- 解压并返回可变长度的同类项目列表。首先,将列表的长度解压缩为无符号整数,然后像上面的unpack_farray()一样解压缩每个元素。
Exceptions
此模块中的异常编码为类实例:
exception
xdrlib.
Error
- 基本异常类。 Error具有单个公共属性
msg
,其中包含错误的描述。
- 基本异常类。 Error具有单个公共属性
exception
xdrlib.
ConversionError
- 从Error派生的类。不包含其他实例变量。
这是一个如何捕获这些异常之一的示例:
import xdrlib
p = xdrlib.Packer()
try:
p.pack_double(8.01)
except xdrlib.ConversionError as instance:
print('packing the double failed:', instance.msg)