मैं निम्नलिखित कोड का उपयोग कर मेरा पीसी आवेदन पर एक 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 के बाद, मुझे एक हैशप प्राप्त होता है जो मूल रूप से वीएम पर निर्भर करता है और जब मैं इसे डीबगर में देखता हूं, तो इसमें मूल मूल्यों के बीच बहुत सारी शून्य प्रविष्टियां होती हैं। हालांकि, वे शून्य कुंजी नहीं हैं लेकिन सिर्फ शून्य हैं और मैं नहीं देख सकता कि उनके अंदर क्या है। मैं ग्रहण में डीबग। ऐसा क्यों होगा?
धन्यवाद, यह वास्तव में मदद करता है। मुझे कभी नहीं पता था कि मैं हैश मैप पैरामीटर के साथ खेल सकता हूं। प्रारंभिकरण के दौरान लोड फैक्टर और क्षमता निर्दिष्ट करना इससे मदद करेगा। – Erol
मैं सोच रहा था, अगर मैं deserialization से पहले हैश मैप बना सकता हूं और पढ़ा है ऑब्जेक्ट विधि उस विशिष्ट हैश मैप को लिखने के लिए उपयोग करें। क्या तुम्हारे पास कोई विचार है? – Erol
एक बड़ा हैश मैप लोड करने का प्रयास करें ताकि आपने पहले से हैश मैप myMap = new हैश मैप (संख्याऑफमेंट्स * 2); से पहले स्थान आरक्षित किया है। अगर ऐसा नहीं होता है तो आप इसे LinkedHashMap के साथ करने का प्रयास कर सकते हैं। अगर मुझे सही याद है तो मुझे कुछ समस्याएं भी थीं और LinkedHashMap deserial एंड्रॉइड में तेज़ था (कोई समझ नहीं आता लेकिन मेरा समय ठोस था)। आप कोशिश कर सकते हैं कि –
weakwire