2010-11-15 11 views
13

मेरा (डीएसपी) आवेदन स्थिर दर पर डेटा उत्पन्न करता है। दर उपयोगकर्ता द्वारा चुने गए कॉन्फ़िगरेशन पर निर्भर करती है। मैं जानना चाहता हूं कि प्रति सेकेंड कितने बाइट उत्पन्न होते हैं। डेटा संरचना में दोहराया गया (पैक किया गया) फ़्लोटिंग पॉइंट फ़ील्ड होता है। क्षेत्र की लंबाई स्थिर है, लेकिन उपयोगकर्ता द्वारा बदला जा सकता है।क्या Google प्रोटोकॉल बफर serialization से पहले आकार गणना का समर्थन करता है?

क्या कोई प्रोटोकॉल बफर फ़ंक्शन है जो क्रमिकरण से पहले संदेश आकार की गणना करेगा?

उत्तर

7

यह समय से आगे पता करने के लिए असंभव है क्योंकि Protobuf संरचनाओं यह सबसे कम संभव बाइट्स में दिया जाता है पैक - यह उदाहरण के लिए int x = 1; के लिए चार बाइट्स का उपयोग नहीं होगा - तो पुस्तकालय पूरे ग्राफ चलने के लिए पता करने के लिए होगा आउटपुट आकार।

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

+0

हम इसे int के लिए 4 बाइट्स का उपयोग करने के लिए मजबूर कैसे कर सकते हैं और इसे पैक नहीं करते हैं, निश्चित आकार क्रमबद्ध डेटा रखने के लिए? –

+0

आप बल्कि varint एन्कोडिंग से प्रत्येक आधार प्रकार के लिए लिखें तरीकों का उपयोग करके Protobuf OutputStream कक्षाएं आप यह कर सकते हैं का उपयोग कर डेटा को क्रमानुसार तो अपने आप को - देख https://developers.google.com/protocol-buffers/docs/encoding –

15

आप संदेश वस्तुओं का निर्माण है, तो आप संदेश जो बाइट की संख्या को धारावाहिक संदेश को ले जाएगा रिटर्न पर ByteSize() कॉल कर सकते हैं। ByteSize के C++ दस्तावेज़ों का एक लिंक है।

+0

है वहाँ कोई ByteSize() - पायथन के लिए एपीआई की तरह? मैंने देखा [यह] (https://developers.google.com/protocol-buffers/docs/reference/python/) और मुझे कुछ भी नहीं मिला –

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