मेरे पास ArrayList
कस्टम, सरल Serializable
ऑब्जेक्ट्स है जो मैं डिस्क पर कैश करना चाहता हूं और पुनः लॉन्च पर पढ़ना चाहता हूं। मेरा डेटा बहुत छोटा है, लगभग 25 ऑब्जेक्ट्स और अधिकांश 5 सूचियों में, इसलिए मुझे लगता है कि SQLite अधिक हो जाएगा। आईफोन की दुनिया में मैं NSKeyedArchiver
और NSKeyedUnarchiver
का उपयोग करता हूं जो बहुत अच्छा काम करता है। एंड्रॉइड पर मैंने इसे FileOutputStream
और ObjectOutputStream
के साथ करने का प्रयास किया है और परिणाम समान है, प्रदर्शन भयानक है। Android में फ़ाइल सिस्टम में छोटी ऑब्जेक्ट्स को कैश करने के लिए कोई बेहतर (तेज़ पढ़ें) तरीका है?एंड्रॉइड में डेटा कैश करने के लिए सर्वश्रेष्ठ तरीका
उत्तर
इसके लिए मैं अपने कुछ स्ट्रिंग डेटा को BufferedWriter/BufferedReader का उपयोग करके डिस्क पर कैश करता हूं और यह बहुत तेज़ है। तथ्य यह है कि साझा डेटा को समान डेटा संग्रहीत करने से तेज़ है। कोड कुछ इस तरह (ध्यान दें कि चीजों को तेजी से हो सकता है जब आप बफर आकार प्रदान करते हैं)
final BufferedWriter out = new BufferedWriter(new FileWriter(file), 1024);
out.write(stuff);
out.close();
हाँ, समस्या यह है कि मैं "सामान" चाहता हूं कि मेरी धारावाहिक वस्तुएं हों जो किसी भी कारण से समस्या का प्रतीत होता है। –
ठीक है अगर आपकी ऑब्जेक्ट्स काफी सरल हैं तो आप readObject को ओवरराइट कर सकते हैं और लिख सकते हैं ऑब्जेक्ट – Bostone
इसलिए मैंने इस विधि का उपयोग करके फ़ाइल में कच्चे JSON टेक्स्ट को लिखना समाप्त कर दिया और फिर लॉन्च होने पर इसे फिर से पार्स कर दिया। चूंकि JSON छोटा है, ऐसा लगता है कि यह ठीक है, हालांकि मैं अभी भी पूरी तरह से खुश नहीं हूं क्योंकि डिस्क पर मेरी ऑब्जेक्ट्स को क्रमबद्ध करने में सक्षम नहीं है। –
यह रूपरेखा के बिना पता करने के लिए मुश्किल है चला जाता है, लेकिन मेरा अनुमान है अपने खराब प्रदर्शन ObjectOutputStream
उपयोग करने के लिए नीचे है। क्या आपने अपना खुद का writeObject(ObjectOutputStream)
and readObject(ObjectOutputStream)
methods लिखने की कोशिश की है क्योंकि इससे प्रदर्शन में मदद मिल सकती है।
आप traceview
उपकरण का उपयोग यह देखने के लिए कर सकते हैं कि एप्लिकेशन कहां धीमा चल रहा है। at this question for instructions on how to use traceview
देखें।
public class MyClass implements Serializable
{
private static final long serialVersionUID = 1L;
public String title;
public String startTime;
public String endTime;
public String day;
public boolean classEnabled;
public MyClass(String title, String startTime, boolean enable) {
this.title = title;
this.startTime = startTime;
this.classEnabled = enable;
}
public boolean saveObject(MyClass obj) {
final File suspend_f=new File(SerializationTest.cacheDir, "test");
FileOutputStream fos = null;
ObjectOutputStream oos = null;
boolean keep = true;
try {
fos = new FileOutputStream(suspend_f);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
} catch (Exception e) {
keep = false;
} finally {
try {
if (oos != null) oos.close();
if (fos != null) fos.close();
if (keep == false) suspend_f.delete();
} catch (Exception e) { /* do nothing */ }
}
return keep;
}
public MyClass getObject(Context c) {
final File suspend_f=new File(SerializationTest.cacheDir, "test");
MyClass simpleClass= null;
FileInputStream fis = null;
ObjectInputStream is = null;
try {
fis = new FileInputStream(suspend_f);
is = new ObjectInputStream(fis);
simpleClass = (MyClass) is.readObject();
} catch(Exception e) {
String val= e.getMessage();
} finally {
try {
if (fis != null) fis.close();
if (is != null) is.close();
} catch (Exception e) { }
}
return simpleClass;
}
और गतिविधि
से फोन करif(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"MyCustomObject");
else
cacheDir= getCacheDir();
if(!cacheDir.exists())
cacheDir.mkdirs();
MyClass m = new MyClass("umer", "asif", true);
boolean result = m.saveObject(m);
if(result)
Toast.makeText(this, "Saved object", Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Error saving object", Toast.LENGTH_LONG).show();
MyClass m = new MyClass();
MyClass c = m.getObject(this);
if(c!= null)
Toast.makeText(this, "Retrieved object", Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Error retrieving object", Toast.LENGTH_LONG).show();
मैनिफ़ेस्ट फ़ाइल में WRITE_EXTERNAL_STORAGE अनुमतियों का उपयोग करने भूल नहीं है।
- 1. डेटा कैश करने का सबसे अच्छा तरीका
- 2. आईफोन ऐप में डेटा सिंक करने के लिए सर्वश्रेष्ठ रणनीति
- 3. एंड्रॉइड में सूचीदृश्य डेटा कैश कैसे करें?
- 4. एंड्रॉइड एप्लिकेशन लाइफसाइकिल के दौरान डेटा कैश करने का अच्छा तरीका?
- 5. यूटीएफ -8 डेटा के लिए सर्वश्रेष्ठ प्रकार?
- 6. सशर्त चर असाइनमेंट के लिए सर्वश्रेष्ठ तरीका
- 7. सरल डेटा के लिए सर्वश्रेष्ठ सर्वर-साइड डेटा स्टोरेज विधि
- 8. PHP एपीसी कैश करने या कैश करने के लिए नहीं?
- 9. समय श्रृंखला डेटा के लिए सर्वश्रेष्ठ डेटा संरचना
- 10. विकास के लिए सर्वश्रेष्ठ एंड्रॉइड टैबलेट
- 11. बिजनेस ऑब्जेक्ट में डेटा एक्सेस लेयर के लिए सर्वश्रेष्ठ "पैटर्न"
- 12. Grails \ Hibernate: कैश करने या कैश करने के लिए नहीं?
- 13. डेटा लेयर सर्वश्रेष्ठ अभ्यास
- 14. एंड्रॉइड में कैश कैश कैसे करें?
- 15. एंड्रॉइड लॉगिन - सर्वश्रेष्ठ कार्यान्वयन
- 16. रूबोटो (एंड्रॉइड के लिए रूबी) के लिए सर्वश्रेष्ठ ट्यूटोरियल?
- 17. कैश, इलाके में डेटा रखने के लिए तकनीकें?
- 18. सर्वश्रेष्ठ अभ्यास? आईफोन: सिंक डेटा
- 19. साझा वरीयता में डेटा कैश
- 20. मेलिंग के लिए सर्वश्रेष्ठ WYSIWYG संपादक (या मेलिंग के लिए उपयोग करने का सबसे अच्छा तरीका)
- 21. आईफोन और एंड्रॉइड के लिए सर्वश्रेष्ठ क्रॉस-प्लेटफार्म विकास उपकरण
- 22. सिंगलेट्स में डेटा कनेक्शन के निर्भरता इंजेक्शन के लिए सर्वश्रेष्ठ दृष्टिकोण
- 23. आईफोन में डेटा स्टोर करने के लिए कहां?
- 24. सर्वश्रेष्ठ कोर डेटा सहेजने की रणनीति (डिस्क पर डेटा को सहेजने के लिए)
- 25. कैश करने के लिए या कैश करने के लिए नहीं - GetCustomAttributes
- 26. सेवा और डेटा अनुबंधों के लिए सर्वश्रेष्ठ अभ्यास - WCF
- 27. आईओएस टैब बार नियंत्रक के लिए सर्वश्रेष्ठ एंड्रॉइड समतुल्य
- 28. स्टॉक/वित्तीय डेटा के लिए सर्वश्रेष्ठ/सबसे व्यापक API
- 29. जावा - सर्वश्रेष्ठ उपयुक्त डेटा संरचना
- 30. किसी सर्वर से डेटा कैश करने के लिए क्लाइंट (आईओएस) पर कोर डेटा रणनीति
क्या आप जानते हैं कि प्रदर्शन हॉग कौन सा हिस्सा है? –