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)