2009-10-13 18 views
5

मुझे बाइनरी (टेक्स्ट/जेएसओएन दुर्भाग्य से नहीं) Thrift ऑब्जेक्ट्स के रूप में क्रमबद्ध कुछ फ़ाइलों को संसाधित करने के लिए कहा गया है, लेकिन मेरे पास प्रोग्राम बनाने वाले प्रोग्राम या प्रोग्रामर तक पहुंच नहीं है, इसलिए मुझे उनकी संरचना का कोई अंदाजा नहीं है, फील्ड ऑर्डर इत्यादि। क्या बाइनरी फाइल खोलने और इसका विश्लेषण करने के लिए थ्रिफ्ट पुस्तकालयों का उपयोग करने का कोई तरीका है, फ़ील्ड प्रकारों, मूल्यों, घोंसले आदि की सूची प्राप्त करना?आप एक बाइनरी थ्रिफ्ट फ़ाइल इंजीनियर कैसे कर सकते हैं?

+0

मुझे लगता है कि आप http://incubator.apache.org/thrift/ के बारे में बात कर रहे हैं - आप शायद उस भाषा को पोस्ट/टैग करना चाहें जो आप उपयोग कर रहे हैं। – TrueWill

उत्तर

7

दुर्भाग्यवश ऐसा प्रतीत होता है कि थ्रिफ्ट का बाइनरी प्रोटोकॉल डेटा का बहुत अधिक टैगिंग नहीं करता है; यह डीकोड करने के लिए प्रतीत होता है कि आपके पास .thrift फ़ाइल है, इसलिए आप जानते हैं कि अगले 4 बाइट्स को पूर्णांक माना जाता है, और वास्तव में फ्लोट का पहला भाग नहीं होता है। तो ऐसा प्रतीत होता है कि आप मूल रूप से हेक्स संपादक (या समतुल्य) में फ़ाइलों को देखकर और सटीक पैटर्न के आधार पर फ़ील्ड को कम करने की कोशिश कर रहे हैं।

एक बहुत कुछ उपयोगी बिट्स के होते हैं:

प्रत्येक फ़ाइल एक संस्करण, प्रोटोकॉल पहचानकर्ता स्ट्रिंग, और क्रम संख्या के साथ शुरू होता है। मानचित्र 6 बाइट्स से शुरू होंगे जो कुंजी और मान प्रकारों (पहले दो बाइट्स, पूर्णांक कोड के रूप में) की पहचान करेंगे और 4 बाइट पूर्णांक के रूप में तत्वों की संख्या को पहचानेंगे। प्रकार कोड मानक मानते हैं (उनके परिभाषाओं का कैनोलिक स्थान थ्रिफ्ट स्रोतों में TProtocol.h प्रतीत होता है, उदाहरण के लिए एक बूलियन मान टाइप कोड 2, यूटीएफ -8 स्ट्रिंग द्वारा टाइप कोड 16 द्वारा निर्दिष्ट किया जाता है, और इसी तरह) । स्ट्रिंग्स को 4 बाइट पूर्णांक लंबाई फ़ील्ड द्वारा उपसर्ग किया जाता है, और सूचियों को टाइप (1 बाइट) और 4 बाइट लंबाई से उपसर्ग किया जाता है। ऐसा लगता है कि सभी पूर्णांक फ़ील्ड बड़े-एंडियन बचाए जाते हैं, और फ्लोटिंग पॉइंट आईईईई प्रारूप में सहेजे जाते हैं (जो कम से कम युगल को अपेक्षाकृत आसान बनाना चाहिए)।

टीबीनरीप्रोटोकॉल * थ्रिफ्ट में फ़ाइलों में कुछ और उपयोगी विवरण हैं; प्लस तरफ, कई अलग-अलग कार्यान्वयन हैं ताकि आप उस भाषा में लागू किए गए लोगों को पढ़ सकें जिनके साथ आप सबसे अधिक आरामदायक हैं।

क्षमा करें, मुझे पता है कि शायद यह सहायक नहीं है लेकिन यह वास्तव में प्रकट होता है यह थ्रिफ्ट बाइनरी प्रारूप प्रदान करता है; स्पष्ट रूप से द्विआधारी प्रारूप को इस इरादे से डिजाइन किया गया था कि आप हमेशा सटीक प्रोटोकॉल स्पेक को पहले से ही जानते होंगे, और यह लक्ष्य अंधेरे से डीकोड करने के लिए आसान बनाने के बजाय तार स्थान को कम करना था।

संबंधित मुद्दे