मुझे निम्न समस्या का सामना करना पड़ रहा है। मुझे (डी) डिस्क पर एक फ़ाइल में ऑब्जेक्ट्स की धारा धारावाहिक (बाइनरी) की आवश्यकता है। सीरियलाइजेशन हिस्सा कोई मुद्दा नहीं है, बस एपेंड मोड में एक स्ट्रीम खोलें और नेट की बाइनरीफॉर्मेटर सीरियलाइज विधि का उपयोग करें और आप कर चुके हैं। इस दृष्टिकोण के साथ समस्या यह है कि मैं इस स्ट्रीम को बाइनरीफॉर्मेटर के deserialize फ़ंक्शन को नहीं दे सकता, इसमें जो वस्तु है, वह उस ऑब्जेक्ट का एक उदाहरण नहीं है जिसे मैंने क्रमबद्ध किया है।बाइनरी (डी) ऑब्जेक्ट्स की एक धारा का सीरियलाइजेशन 1 फ़ाइल
क्या इस समस्या का एक आम समाधान मौजूद है? किसी दिए गए स्ट्रीम में क्रमबद्ध सभी ऑब्जेक्ट्स एक ही प्रकार के होते हैं, इसलिए कम से कम हमें यह पता लगाने की आवश्यकता नहीं होती कि क्या deserialized किया जाना है, यह एक दिया गया है, लेकिन ऐसा लगता है कि यह मेरे लिए एक तरीका सुझाता है।
स्पष्टीकरण प्राप्त उत्तरों पर आधारित में बड़े होने की उम्मीद है भेजा वस्तुओं की संख्या और यह (एक आवरण संग्रह में उन सब को धारण करने के लिए डिस्क पर निस्तब्धता उन सब को स्मृति में लोड करने की आवश्यकता होगी के रूप में इसलिए अव्यवहार्य है -> नए जोड़ें -> डिस्क पर फ्लश करें)।
- आम तौर पर जब आप एक वस्तु को क्रमानुसार आपको लगता है कि होता है एक फ़ाइल प्राप्त करें:
[वस्तु]
- क्या मैं बनाने रहा एक फ़ाइल है कि है:
[ऑब्जेक्ट] [ऑब्जेक्ट] [ऑब्जेक्ट] [ऑब्जेक्ट] ... [ऑब्जेक्ट]
और मुझे व्यक्तिगत ऑब्जेक्ट उदाहरणों को deserialize करने की जरूरत है।
अग्रिम धन्यवाद!
उत्तर: के बाद से इस सवाल का जवाब (पर्याप्त स्पष्टता के साथ) इस सूत्र में alluded है, लेकिन स्पष्ट रूप से कहा कभी नहीं, मैंने सोचा कि मैं इसे यहाँ राज्य होगी:
while (fileStream.Position < fileStream.Length)
messages.Add((Message)formatter.Deserialize(fileStream));
BinaryFormatter एक वस्तु deserialize होगा वांछित समय पर :) आप fileStream.Length गुण को कैश करना चाहते हैं, क्योंकि प्रत्येक बार जब आप संपत्ति को कॉल करते हैं, तो चीजों को धीमा कर देते समय लंबाई की गणना की जाती है। मुझे कोई सुराग नहीं मिला है कि इस सवाल को पोस्ट करने से पहले मैंने पहली बार ऐसा क्यों नहीं किया था, लेकिन यह अब बेकार ढंग से काम करता है।
ऑब्जेक्ट सिस्टम के जीवनकाल के दौरान स्ट्रीम किए जाते हैं और उनमें से बहुत बड़ी संख्या में अपेक्षित है , मुझे फ्लश करने की जरूरत है।उन्हें रैपर-संग्रह में रखने के साथ मुझे उन्हें स्मृति में रखना होगा और हर बार जब मैं डिस्क पर फ्लश करना चाहता हूं तो पूरी फ़ाइल को फिर से लिखना होगा। – United
पहला सुझाव किसी अन्य लाइब्रेरी की आवश्यकता के कारण काम नहीं करता है (अगर मैं भाग्यशाली हूं तो कानूनी रूप से उर्फ 6 माह + अनुमोदन प्रक्रिया)। दूसरा एक दिलचस्प है। दूसरे जवाब के लिए, ऐसा प्रतीत होता है कि उन्हें ऑब्जेक्ट्स की श्रृंखला को एक फ़ाइल से संग्रहित करने के लिए सामान्य क्रमबद्धता प्राप्त हुई है, बिना उन वस्तुओं के संग्रह में। मेरे परीक्षणों में जो काम नहीं करते थे, इसलिए मुझे लगता है कि मैं इसे और अधिक देखने की कोशिश करूंगा + शायद उस SO प्रश्न में अनुवर्ती हो। – United