2014-06-30 17 views
7

के साथ विफल रहता है मैं बाइट एरे में ऑब्जेक्ट्स लिखने के लिए क्रियो का उपयोग करता हूं। यह बढ़िया काम करता है। लेकिन जब बाइट एरे ऑब्जेक्ट्स में परिवर्तित हो जाते हैं, तो यह com.esotericsoftware.kryo.KryoException: Buffer underflow. अपवाद फेंकता है।क्रियो Deserialization "KryoException: बफर अंडरफ्लो"

 Kryo k=new Kryo(); 
     Input input=new Input(byteArrayOfObject);   
     Object o=k.readObject(input,ObjectClass.class); 

इसके अलावा, हमेशा ऑब्जेक्ट प्रकार अपने आवेदन में परिभाषित नहीं किया जा सकता है:

यह मेरा अक्रमांकन है। अंतिम प्रक्रिया में, वर्ग रूपांतरण होता है। इसलिए,

  • मैं कैसे अक्रमांकन त्रुटि

  • ऊपर हल कर सकते हैं वहाँ readObject (..., className) में कक्षा दिए बिना वस्तु बनाने के लिए एक तरीका है?

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है? क्या यह हल हो गया है? मैंने सुझावों के नीचे कोशिश की, मदद नहीं की .. – Sharath

उत्तर

9

यह तब हुआ जब मैं आउटपुट/इनपुट प्रकारों को सही ढंग से बंद नहीं कर रहा था। आपको यह सुनिश्चित करने की ज़रूरत है कि क्रियो सबकुछ फहराता है लेकिन output.flush() या output.close() कर रहा है।

दूसरा, kryo.writeClassAndObject() पर देखें। फिर आप kryo.readClassAndObject() कर सकते हैं और अपनी ऑब्जेक्ट को जिस प्रकार के रूप में माना जाना चाहिए उसे कास्ट कर सकते हैं।

1

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

+0

यह विचार यहां उत्तर द्वारा प्रतिबिंबित है: https://github.com/EsotericSoftware/kryo/issues/128#issuecomment-28249144 –

1

मैंने एक वास्तविक जावा क्रमिकरण मुद्दे के कारण यह त्रुटि देखी; मेरी कक्षा परिभाषा निर्माता और उपभोक्ता पक्ष (दो अलग-अलग अनुप्रयोगों) पर समान नहीं थी और नतीजतन मुझे यह अपवाद मिला।

अगर आप इसे अभी तक चेक नहीं करते हैं तो बस इसे एक एफवाईआई के रूप में छोड़ना चाहते थे।

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