2013-08-12 13 views
6

के बिना धारावाहिक जावा ऑब्जेक्ट्स से ऑब्जेक्ट स्टेटस को पुनर्प्राप्त कैसे करें मेरे पास एक बाइनरी फ़ाइल है जिसमें जावा सीरियलाइज्ड ऑब्जेक्ट्स (जो मान ऑब्जेक्ट्स हैं) हैं, लेकिन मेरे पास उन क्लास तक पहुंच नहीं है जो उन्हें बनाने के लिए क्रमबद्ध थे वस्तुओं। कक्षा फ़ाइल के बिना, JVM मुझे ऑब्जेक्टInputStreamInstance.readObject() के साथ ऑब्जेक्ट्स पढ़ने की अनुमति नहीं देता है और सही ढंग से java.lang.ClassNotFoundException फेंकता है।क्लास फ़ाइल (ओं)

क्या ऐसी कोई लाइब्रेरी है जो XML या अन्य स्टैंडराइज्ड प्रारूप में डेटा निकालने में मदद कर सकती है? उदाहरण के लिए, यदि नीचे व्यक्ति वर्ग धारावाहिक और एक फ़ाइल में संग्रहीत है, मैं इसे से डेटा निकालने के लिए करना चाहते हैं:

कक्षा परिभाषा

class Person implements Serializable { 
    int age; 
    String name; 
    public Person(int age, int name) { 
    this.age = age; 
    this.name = name; 
    } 
} 

आवश्यक निष्कर्षण स्वरूप (वर्ग के लिए उपयोग के बिना

: फ़ाइल)

<Person> 
    <age>10</age> 
    <name>Name</name> 
</Person> 

मैं भी निम्नलिखित लेकिन मैं के लिए क्या देख रहा था नहीं मिला जाँच कर ली है

  1. एक्सस्ट्रीम (http://x-stream.github.io/) उस ऑब्जेक्ट से एक्सएमएल बनाने के लिए जावा ऑब्जेक्ट तक पहुंच की आवश्यकता है। हालांकि, मैं कक्षा फ़ाइल की इच्छा के लिए वस्तुओं को बनाने में असमर्थ हूं।
  2. Serialysis बहुत पुरानी https://weblogs.java.net/blog/emcmanus/archive/2007/06/disassembling_s.html

आपकी मदद के लिए धन्यवाद प्रतीत होता है।

सादर, Gursev

+0

यहां कुछ अच्छे विचार हैं, जैसे कि अधिकांश उत्तरों को क्लास फ़ाइल की आवश्यकता नहीं होती है: http://stackoverflow.com/questions/181448/gui-tool-to-browse-java-serialized-objects – lreeder

+0

@Ireeder के लिए धन्यवाद आपका उत्तर। मैंने उस प्रश्न को पूछने से पहले उस लिंक की समीक्षा की और यह एक उत्पाद/सॉफ्टवेयर को इंगित करता है, न कि एक लाइब्रेरी जिसे मैं ढूंढ रहा हूं। –

उत्तर

5

चेक jdeserialize। इसमें कमांड लाइन मोड है, लेकिन a reasonably well documented API भी है। एक्सएमएल में स्वचालित रूप से फिर से क्रमबद्ध करने के बारे में? मुझे ऐसा नहीं लगता। ऐसा करने के बहुत सारे तरीके हैं। आपको शायद इसे 2 अलग-अलग चरणों के रूप में जाना होगा। jdeserialize कक्षाओं (स्रोत स्रोत जावा कोड का उत्पादन) के विपरीत इंजीनियरिंग में मददगार हो सकता है, खासकर जब यह कई एक्सएमएल क्रमिकरण उपकरण द्वारा आवश्यक है।

अब, अगर मूल वर्गों डिफ़ॉल्ट क्रमबद्धता तंत्र (readObject या समानता अधिभावी द्वारा) (javax.crypto.SealedObject और/या java.security.SignedObject में वस्तुओं लपेटकर की तरह) का उपयोग नहीं किया या किया उपयोग डेटा कहानियो/एन्क्रिप्शन तकनीक है, तो सफलता के अवसरों को कर रहे हैं कम और कम।

+1

AFAIK, धारावाहिक वस्तु में फ़ील्ड नाम, फ़ील्ड प्रकार और अन्य जानकारी के बारे में विवरण शामिल है। स्रोत: 1. http://www.javaworld.com/community/node/2915 2. http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html –

+0

@ गर्ववकाल बहुत बहुत धन्यवाद। मैंने अपना जवाब पूरी तरह बदल दिया। तीसरे पक्ष के क्रमबद्ध वस्तुओं के साथ मेरे पिछले अनुभव बेहद खराब हैं। इस बिंदु पर कि मैं भूल गया था कि डिफ़ॉल्ट तंत्र कितना पारदर्शी है। –

+0

अपडेट के लिए धन्यवाद। jdeserialize आशाजनक लग रहा है। मैं अब यह देखने के लिए प्रश्न खोलूंगा कि अतिरिक्त संभावनाएं/रत्न हैं या नहीं। –

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