xdrlib
— XDR 데이터 인코딩과 디코딩¶
소스 코드: Lib/xdrlib.py
xdrlib
모듈은 1987년 6월에 Sun Microsystems, Inc.가 작성한 RFC 1014에 설명된 외부 데이터 표현 표준(External Data Representation Standard)을 지원합니다. 이 모듈은 RFC에 설명된 대부분의 데이터형을 지원합니다.
xdrlib
모듈은 두 개의 클래스를 정의합니다. 하나는 변수를 XDR 표현으로 패킹하고, 다른 하나는 XDR 표현으로부터 언패킹합니다. 또한, 두 가지 예외 클래스가 있습니다.
-
class
xdrlib.
Unpacker
(data)¶ Unpacker
는 문자열 버퍼에서 XDR 데이터값을 언패킹하는 반대 클래스입니다. 입력 버퍼는 data로 주어집니다.
더 보기
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
(value)¶ 단정밀도 부동 소수점 숫자 value를 팩합니다.
-
Packer.
pack_double
(value)¶ 배정밀도 부동 소수점 숫자 value를 팩합니다.
다음 메서드는 문자열, 바이트열 및 불투명 데이터의 패킹을 지원합니다:
-
Packer.
pack_fstring
(n, s)¶ 고정 길이 문자열 s를 팩합니다. n는 문자열의 길이이지만 데이터 버퍼에 팩 되지는 않습니다. 4바이트 정렬을 보장하는 데 필요하면 문자열에 null 바이트가 채워집니다.
-
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)¶ 균질한 항목의 list를 팩합니다. 이 메서드는 크기가 결정되지 않은 리스트에 유용합니다; 즉, 전체 리스트를 검사해볼 때까지 크기를 알 수 없습니다. 리스트의 각 항목에 대해 부호 없는 정수
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은 각 요소를 팩하는 데 사용되는 함수입니다.
-
Packer.
pack_array
(list, pack_item)¶ 균질한 항목의 가변 길이 list를 팩합니다. 먼저, 리스트의 길이가 부호 없는 정수로 팩 되고, 각 요소는 위의
pack_farray()
와 같이 팩 됩니다.
Unpacker 객체¶
Unpacker
클래스는 다음과 같은 메서드를 제공합니다:
-
Unpacker.
reset
(data)¶ 지정된 data로 문자열 버퍼를 재설정합니다.
-
Unpacker.
get_position
()¶ 데이터 버퍼의 현재의 언팩 위치를 반환합니다.
-
Unpacker.
set_position
(position)¶ 데이터 버퍼 언팩 위치를 position으로 설정합니다.
get_position()
과set_position()
사용 시 주의해야 합니다.
-
Unpacker.
get_buffer
()¶ 현재의 언팩 데이터 버퍼를 문자열로 반환합니다.
또한, Packer
로 팩할 수 있는 모든 데이터형은 Unpacker
로 언팩할 수 있습니다. 언패킹 메서드는 unpack_type()
형식이며 인자를 받아들이지 않습니다. 이것들은 언팩 된 객체를 반환합니다.
-
Unpacker.
unpack_float
()¶ 단정밀도 부동 소수점 숫자를 언팩합니다.
-
Unpacker.
unpack_double
()¶ unpack_float()
와 유사하게, 배정밀도 부동 소수점 숫자를 언팩합니다.
또한, 다음 메서드는 문자열, 바이트열 및 불투명 데이터를 언팩합니다:
-
Unpacker.
unpack_fstring
(n)¶ 고정 길이 문자열을 언팩하고 반환합니다. n는 예상 문자 수입니다. 4바이트의 정렬을 보장하기 위해서, null 바이트로 채워졌다고 가정합니다.
-
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)¶ 균질한 항목의 가변 길이 list를 언팩하고 반환합니다. 먼저, 리스트의 길이를 부호 없는 정수로 언팩하고, 각 요소는 위의
unpack_farray()
처럼 언팩됩니다.
예외¶
이 모듈의 예외는 클래스 인스턴스로 코딩됩니다:
다음은 이러한 예외 중 하나를 잡는 방법의 예입니다:
import xdrlib
p = xdrlib.Packer()
try:
p.pack_double(8.01)
except xdrlib.ConversionError as instance:
print('packing the double failed:', instance.msg)