2013-01-03 6 views
7

संभव डुप्लिकेट: है
Converting any object to a byte array in javaजावा में, ऑब्जेक्ट्स की सूची को बाइट सरणी में कैसे परिवर्तित करें?

मैं एक वर्ग की जरूरत है कि कैश हो जाने की। कैश एपीआई एक इंटरफ़ेस प्रदान करता है जो byte[] कैश करता है। मेरी कक्षा में List<Author> के रूप में फ़ील्ड है, जहां Author एक और वर्ग है। कैशिंग के लिए List<Author> से byte[] को चालू करने का मेरे लिए सही तरीका क्या है? और List<Author> को पुनर्निर्माण के लिए कैश से byte[] पुनर्प्राप्त करें?

Author कक्षा के बारे में अधिक जानकारी: यह बहुत आसान है, केवल दो String फ़ील्ड हैं। एक String फ़ील्ड null होना संभव है।

+3

http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html –

उत्तर

14

लेखक वर्ग को लागू करना चाहिए Serializable

तो फिर तुम ObjectOutputStream उपयोग कर सकते हैं वस्तु क्रमानुसार करने और ByteArrayOutputStream यह बाइट्स के रूप में लिखा करने के लिए।

फिर ऑब्जेक्टइनपुटस्ट्रीम का उपयोग करके इसे deserialize और वापस कनवर्ट करें।

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(bos); 
    oos.writeObject(list); 
    byte[] bytes = bos.toByteArray(); 
+0

यह बंद है इसलिए सुनिश्चित नहीं है कि लोग इसे पढ़ सकते हैं या नहीं। लेकिन चलो स्टैक ओवरफ्लो की शक्ति का परीक्षण करें: जब मैं सीरियलज़ेबल इंटरफ़ेस लागू करता हूं, तो मुझे एक सीरियल वर्सेनियोड प्रदान करना होता है, जो एक यूआईडी होना चाहिए। सवाल यह है कि, क्या मुझे इसे छोड़ना या इसे छोड़ना ठीक है। अगर मुझे यह प्रदान करना है, तो कैसे? कोई यूआईडी ठीक है? – Steve

2

Author वर्ग serializable करें और एक ObjectOutputStream एक ByteArrayOutputStream द्वारा समर्थित करने के लिए सूची में लिखें।

1

अपनी कक्षा को Serializable बनाएं; बाइटस्ट्रीम पर ऑब्जेक्टस्ट्रीम बनाएं और ऑब्जेक्टस्ट्रीम पर अपनी सूची लिखें। बाइट बफर को बाइटस्ट्रीम से अपने कैशिंग एपीआई में पास करें।

कैश से पुनर्प्राप्त करते समय, आप प्रक्रिया को उलट देते हैं। कैशिंग एपीआई द्वारा बाइट [] से एक बाइटस्ट्रीम बनाएं; बाइटस्ट्रीम से ऑब्जेक्टस्ट्रीम बनाएं; ऑब्जेक्टस्ट्रीम से अपना संग्रह पढ़ें।

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

  • कोई संबंधित समस्या नहीं^_^