Python 3.7

xdrlib - XDR डेटा को एनकोड और डीकोड करें




python

xdrlib - XDR डेटा को एनकोड और डीकोड करें

स्रोत कोड: Lib/xdrlib.py

xdrlib मॉड्यूल जून, 1987 में सन माइक्रोसिस्टम्स, इंक। द्वारा लिखित RFC 1014 में वर्णित बाहरी डेटा प्रतिनिधित्व मानक का समर्थन करता है। यह RFC में वर्णित अधिकांश डेटा प्रकारों का समर्थन करता है।

xdrlib मॉड्यूल दो वर्गों को परिभाषित करता है, एक XDR प्रतिनिधित्व में चर पैकिंग के लिए और दूसरा XDR प्रतिनिधित्व से xdrlib लिए। दो अपवाद वर्ग भी हैं।

class xdrlib.Packer

Packer XDR प्रतिनिधित्व में डेटा पैकिंग के लिए वर्ग है। Packer वर्ग बिना किसी तर्क के त्वरित है।

class xdrlib.Unpacker(data)

Unpacker एक पूरक वर्ग है जो एक स्ट्रिंग बफर से एक्सडीआर डेटा मूल्यों को अनपैक करता है। इनपुट बफर डेटा के रूप में दिया जाता है

यह भी देखें

RFC 1014 - XDR: बाहरी डेटा प्रतिनिधित्व मानक
इस RFC ने डेटा के एन्कोडिंग को परिभाषित किया था जो मूल रूप से लिखे जाने के समय XDR था। यह स्पष्ट रूप से आरएफसी 1832 द्वारा पालन किया गया है
RFC 1832 - XDR: बाहरी डेटा प्रतिनिधित्व मानक
नया RFC जो XDR की एक संशोधित परिभाषा प्रदान करता है।

पैकर वस्तुएं

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)

एकल-सटीक फ़्लोटिंग पॉइंट नंबर मान पैक करता है।

Packer.pack_double(value)

डबल-सटीक फ़्लोटिंग पॉइंट नंबर मान पैक करता है।

निम्न तरीके पैकिंग स्ट्रिंग, बाइट्स और अपारदर्शी डेटा का समर्थन करते हैं:

Packer.pack_fstring(n, s)

एक निश्चित लंबाई स्ट्रिंग पैक, एस n स्ट्रिंग की लंबाई है लेकिन यह डेटा बफ़र में पैक नहीं है । यदि आवश्यक हो तो स्ट्रिंग 4 बाइट संरेखण की गारंटी के लिए नल बाइट्स के साथ गद्देदार है।

Packer.pack_fopaque(n, data)

एक निश्चित लंबाई के अपारदर्शी डेटा स्ट्रीम को पैक करता है, इसी तरह pack_fstring()

Packer.pack_string(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)

सजातीय वस्तुओं की एक निश्चित लंबाई सूची ( सरणी ) पैक करता है। n सूची की लंबाई है; इसे बफ़र में पैक नहीं किया गया है, लेकिन यदि len(array) n के बराबर नहीं है, तो ValueError अपवाद उठाया जाता है। ऊपर के रूप में, pack_item प्रत्येक तत्व को पैक करने के लिए उपयोग किया जाने वाला फ़ंक्शन है।

Packer.pack_array(list, pack_item)

सजातीय वस्तुओं की एक चर लंबाई सूची पैक करता है। सबसे पहले, सूची की लंबाई को एक अहस्ताक्षरित पूर्णांक के रूप में पैक किया जाता है, फिर प्रत्येक तत्व ऊपर pack_farray() रूप में पैक किया जाता है।

नापाक वस्तुएँ

Unpacker वर्ग निम्नलिखित तरीके प्रदान करता है:

Unpacker.reset(data)

दिए गए डेटा के साथ स्ट्रिंग बफर को रीसेट करता है।

Unpacker.get_position()

डेटा बफ़र में वर्तमान अनपैक स्थिति देता है।

Unpacker.set_position(position)

डेटा बफ़र अनपैक स्थिति को स्थिति पर सेट करता है। आपको get_position() और set_position() का उपयोग करने के बारे में सावधान रहना चाहिए।

Unpacker.get_buffer()

स्ट्रिंग के रूप में वर्तमान अनपैक डेटा बफ़र लौटाता है।

Unpacker.done()

अनपैक पूरा होने का संकेत देता है। यदि सभी डेटा अनपैक नहीं किए गए हैं, तो एक Error अपवाद उठाता है।

इसके अलावा, हर डेटा प्रकार जिसे Packer साथ पैक किया जा सकता है, अनपैकर के साथ अनपैक किया जा सकता है। unpack_type() विधियाँ फॉर्म unpack_type() , और कोई तर्क नहीं लेते हैं। वे अनपैक्ड वस्तु लौटाते हैं।

Unpacker.unpack_float()

एकल-सटीक फ़्लोटिंग पॉइंट संख्या को अनपैक करता है।

Unpacker.unpack_double()

डबल-सटीक फ़्लोटिंग पॉइंट संख्या को unpack_float() , इसी तरह unpack_float()

इसके अलावा, निम्नलिखित विधियाँ स्ट्रिंग, बाइट्स और अपारदर्शी डेटा को अनपैक करती हैं:

Unpacker.unpack_fstring(n)

अनपैक और एक निश्चित लंबाई स्ट्रिंग लौटाता है। n वर्णों की संख्या अपेक्षित है। 4 बाइट संरेखण की गारंटी के लिए अशक्त बाइट्स के साथ पैडिंग है।

Unpacker.unpack_fopaque(n)

Unpacks और एक निश्चित लंबाई की अपारदर्शी डेटा स्ट्रीम देता है, जो unpack_fstring() समान है।

Unpacker.unpack_string()

अनपैक्स और वैरिएबल लंबाई स्ट्रिंग देता है स्ट्रिंग की लंबाई पहले एक अहस्ताक्षरित पूर्णांक के रूप में unpack_fstring() है, फिर स्ट्रिंग डेटा unpack_fstring() साथ unpack_fstring()

Unpacker.unpack_opaque()

Unpacks और एक वैरिएबल लंबाई अपारदर्शी डेटा स्ट्रिंग देता है, जो 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)

Unpacks और सजातीय वस्तुओं की एक चर लंबाई सूची देता है। सबसे पहले, सूची की लंबाई को एक अहस्ताक्षरित पूर्णांक के रूप में unpack_farray() किया जाता है, फिर प्रत्येक तत्व को unpack_farray() ऊपर के रूप में अनपैक किया जाता है।

अपवाद

इस मॉड्यूल में अपवादों को वर्ग उदाहरण के रूप में कोडित किया गया है:

exception xdrlib.Error

आधार अपवाद वर्ग। Error में एक एकल सार्वजनिक विशेषता msg जिसमें त्रुटि का वर्णन है।

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)