2012-05-16 19 views
5

मैं निम्नलिखित कोड का उपयोग कर मेरा पीसी आवेदन पर एक HashMap serializing कर रहा हूँ में:HashMap Deserialization मुद्दे एंड्रॉयड

private void serialize(HashMap<Integer, Integer> map2write, String name_ser) 
{// serializes fphlist into .ser file called name_ser 
    FileOutputStream fileOut = null; 
    try { 
     fileOut = new FileOutputStream(project_dir + "/" + name_ser + ".ser"); 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(AdminConsoleUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    ObjectOutputStream out; 
    try { 
     out = new ObjectOutputStream(fileOut); 
     out.writeObject(map2write); 
     out.reset(); 
     out.flush(); 
     out.close(); 
     fileOut.close(); 

    } catch (IOException ex) { 
     Logger.getLogger(AdminConsoleUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

तो मैं कर रहा हूँ यह मेरी Android एप्लिकेशन में डी-serializing इस कोड के साथ:

private HashMap<Integer,Integer> deserialize_Map(String fn) 
{// deserializes fn into HashMap 

    HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>(); 
    try 
    { 
     FileInputStream fileIn = new FileInputStream(project_dir + "/" + fn + ".ser"); 
     ObjectInputStream in = new ObjectInputStream(fileIn); 
     hm = (HashMap<Integer,Integer>) in.readObject(); 
     in.close(); 
     fileIn.close(); 

    }catch(IOException i) 
    { 
     Log.e("MYAPP", "exception", i); 
     return null; 
    }catch(ClassNotFoundException c) 
    { 
     Log.e("MYAPP", "exception", c); 
     return null; 
    }catch(ClassCastException ex) 
    { 
     Log.e("MYAPP", "exception", ex); 
     return null; 
    } 

    return hm; 
} 

अंत में, मुझे दो समस्याओं का सामना करना पड़ रहा है।

1) Deserialization बहुत लंबा समय लगता है। इसमें हजारों चाबियां हैं, तो क्या यह सामान्य है? क्या इससे निपटने के लिए एक और अधिक कुशल धारावाहिक विधि है?

2) deserialization के बाद, मुझे एक हैशप प्राप्त होता है जो मूल रूप से वीएम पर निर्भर करता है और जब मैं इसे डीबगर में देखता हूं, तो इसमें मूल मूल्यों के बीच बहुत सारी शून्य प्रविष्टियां होती हैं। हालांकि, वे शून्य कुंजी नहीं हैं लेकिन सिर्फ शून्य हैं और मैं नहीं देख सकता कि उनके अंदर क्या है। मैं ग्रहण में डीबग। ऐसा क्यों होगा?

उत्तर

3

1) वीएम आकार में "सामान्य" हैश मैप का आकार क्या है? मुझे नहीं लगता कि यह समस्या एक और समाधान है (यदि कोई है तो कृपया हमें दिखाएं)। आप एक स्क्लाइट या कुछ साझा करने का प्रयास कर सकते हैं। आप colaborate क्या आप हल करने के लिए हम टेकनीक कि काम तेजी से बनाने के प्रस्ताव कर सकते हैं कोशिश कर रहे हैं पसंद है

अद्यतन

तुम एक बड़ी क्षमता है, तो साथ init समय अपने मानचित्र आरंभ, जैसा कि आप का सुझाव दिया, कोशिश कर सकते हैं आरंभिक क्षमता और लोड एफ ए सी: आप से here

HashMap का एक उदाहरण दो पैरामीटर है कि इसके प्रदर्शन को प्रभावित किया है 2. आकार HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>(SIZE*2);

पता टो। क्षमता हैश तालिका में बाल्टी की संख्या है, और हैश तालिका बनाई जाने पर प्रारंभिक क्षमता केवल क्षमता है। भार कारक यह माप है कि इसकी क्षमता स्वचालित रूप से बढ़ने से पहले हैश तालिका को कितनी पूर्ण होने की अनुमति है। हैश तालिका में प्रविष्टियों की संख्या लोड फैक्टर और वर्तमान क्षमता के उत्पाद से अधिक हो गया है, क्षमता लगभग मिलावत विधि

+0

धन्यवाद, यह वास्तव में मदद करता है। मुझे कभी नहीं पता था कि मैं हैश मैप पैरामीटर के साथ खेल सकता हूं। प्रारंभिकरण के दौरान लोड फैक्टर और क्षमता निर्दिष्ट करना इससे मदद करेगा। – Erol

+0

मैं सोच रहा था, अगर मैं deserialization से पहले हैश मैप बना सकता हूं और पढ़ा है ऑब्जेक्ट विधि उस विशिष्ट हैश मैप को लिखने के लिए उपयोग करें। क्या तुम्हारे पास कोई विचार है? – Erol

+0

एक बड़ा हैश मैप लोड करने का प्रयास करें ताकि आपने पहले से हैश मैप myMap = new हैश मैप (संख्याऑफमेंट्स * 2); से पहले स्थान आरक्षित किया है। अगर ऐसा नहीं होता है तो आप इसे LinkedHashMap के साथ करने का प्रयास कर सकते हैं। अगर मुझे सही याद है तो मुझे कुछ समस्याएं भी थीं और LinkedHashMap deserial एंड्रॉइड में तेज़ था (कोई समझ नहीं आता लेकिन मेरा समय ठोस था)। आप कोशिश कर सकते हैं कि – weakwire

4

आप एक JSON ऑब्जेक्ट के लिए HashMap serializing की कोशिश की है फोन करके दोगुनी है? एक फ़ाइल से JSON deserializing के लिए एंड्रॉइड बहुत अच्छा समर्थन है।

+0

धन्यवाद। यह मानक क्रमबद्धता के लिए एक अच्छा विकल्प की तरह दिखता है। अगर मैं कमजोर के समाधान के साथ सफल नहीं होगा तो मैं इसे मानूंगा। – Erol

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