की प्रतिलिपि के बिना बाइटस्ट्रिंग से बाइट सरणी प्राप्त करें मान लीजिए मेरे पास एक विधि है void foo(byte[] bytes)
को इसके पैरामीटर के रूप में बाइट सरणी की आवश्यकता है। Howverver, Protobuf में बाइट सरणी के लिए जावा प्रकार ByteString
है।प्रोटोकॉल बफर:
मैं बाइट सरणी प्राप्त करने के लिए byte[] toByteArray()
का उपयोग कर सकता हूं। लेकिन समस्या यह है कि यह विधि कॉपी का उपयोग करके एक नई सरणी बनाती है, जो अपेक्षाकृत महंगी है। मैं इसके बजाय अंतर्निहित सरणी सीधे वापस कर दूंगा, या इसके बजाय एक दृश्य वापस करूँगा।
क्या इसके लिए कोई एपीआई है, या प्रदर्शन जुर्माना स्वीकार्य है?
foo (बाइट [] बाइट्स) विधि क्या करता है? क्या आप इसका कार्यान्वयन बदल सकते हैं? – kostya
@ कोस्ट्या क्या आपका मतलब है कि मैं 'बाइटस्ट्रिंग # लिखने के लिए (आउटपुटस्ट्रीम)' का उपयोग कर सकता हूं? लेकिन मैं वास्तव में चाहता हूं कि मेरे मॉड्यूल एक-दूसरे से डीकॉप्ल हो जाएं। – duleshi
हां, 'लिखने के लिए कुछ'। 'आउटपुटस्ट्रीम' मानक लाइब्रेरी से एक कक्षा है, इसलिए आप अभी भी foo() विधि protobuf मुक्त रख सकते हैं। 'बाइटस्ट्रिंग' के लिए जावाडॉक्स स्पष्ट रूप से कहते हैं कि जो भी आप पूछते हैं वह असंभव है: 'स्ट्रिंग' की तरह, 'बाइटस्ट्रिंग' की सामग्री को बदलने के लिए कभी नहीं देखा जा सकता है, क्लाइंट कोड में डेटा रेस या गलत एपीआई उपयोग की उपस्थिति में भी नहीं । – kostya