2011-11-18 6 views
8

मैं वास्तविक स्थिति या बीज या सिस्टम के किसी भी चीज़ को प्राप्त करने में सक्षम होना चाहता हूं। यादृच्छिक इसलिए मैं एक ऐप बंद कर सकता हूं और जब उपयोगकर्ता इसे पुनरारंभ करता है, तो यह संग्रहीत एक के साथ "इसे" संशोधित करता है और जारी रहता है जैसे कि यह कभी नहीं था बन्द है।क्या सिस्टम की वास्तविक स्थिति को पकड़ने का कोई तरीका है। यादृच्छिक?

क्या यह संभव है?

जॉन के विचार का उपयोग करके मैं इसका परीक्षण करने के लिए आया था;

static void Main(string[] args) 
{ 
    var obj = new Random(); 
    IFormatter formatter = new BinaryFormatter(); 
    Stream stream = new FileStream("c:\\test.txt", FileMode.Create, FileAccess.Write, FileShare.None); 
    formatter.Serialize(stream, obj); 
    stream.Close(); 
    for (var i = 0; i < 10; i++) 
     Console.WriteLine(obj.Next().ToString()); 

    Console.WriteLine(); 

    formatter = new BinaryFormatter(); 
    stream = new FileStream("c:\\test.txt", FileMode.Open, FileAccess.Read, FileShare.Read); 
    obj = (Random)formatter.Deserialize(stream); 
    stream.Close(); 
    for (var i = 0; i < 10; i++) 
     Console.WriteLine(obj.Next().ToString()); 

    Console.Read(); 
} 

उत्तर

10

ताकि आप आप सिर्फ BinaryFormatter का उपयोग करें और बाइट सरणी बचा सकते हैं मिल सकता है यह, serializable है ...

नमूना कोड:

एक नमूना रन पर
using System; 
using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 

public class Program 
{ 
    public static void Main(String[] args) 
    { 
     Random rng = new Random(); 
     Console.WriteLine("Values before saving..."); 
     ShowValues(rng); 

     BinaryFormatter formatter = new BinaryFormatter(); 
     MemoryStream stream = new MemoryStream(); 
     formatter.Serialize(stream, rng); 

     Console.WriteLine("Values after saving..."); 
     ShowValues(rng); 

     stream.Position = 0; // Rewind ready for reading 
     Random restored = (Random) formatter.Deserialize(stream); 

     Console.WriteLine("Values after restoring..."); 
     ShowValues(restored);  
    } 

    static void ShowValues(Random rng) 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      Console.WriteLine(rng.Next(100)); 
     } 
    } 
} 

परिणाम आशाजनक हैं:

Values before saving... 
25 
73 
58 
6 
33 
Values after saving... 
71 
7 
87 
3 
77 
Values after restoring... 
71 
7 
87 
3 
77 

मान्य है कि मैं अंतर्निहित धारावाहिकता पर उत्सुक नहीं हूं, लेकिन यदि यह एक रीसो के लिए है स्पष्ट रूप से त्वरित और गंदे हैक, यह ठीक होना चाहिए ...

+0

मैं अपनी तरफ से कोशिश करूंगा, मैं एक ही समय में एक नजर रखूंगा – Fredou

+0

धन्यवाद :-), अच्छी तरह से काम करना, मैंने क्रमबद्धता के बारे में नहीं सोचा था :-( – Fredou

+0

जेनरेट की गई फ़ाइल को देखकर, ऐसा लगता है पहले या उत्पन्न कुछ यादृच्छिक संख्या को संग्रहीत करना। यह बड़ा हो सकता है। आप जानते हैं कि इस समस्या को कैसे ठीक किया जाए? – Fredou

0

मैं सी # लड़का नहीं हूं, इसलिए मेरे पास स्रोत कोड देखने के लिए संसाधन नहीं हैं, लेकिन बीज कक्षा में संग्रहीत किया जाना चाहिए। इसके प्रलेखन से कक्षा को सील नहीं किया गया है, इसलिए आपको उप-वर्ग बनाने में सक्षम होना चाहिए। इस सबक्लास में, आप वर्तमान बीज को वापस करने के लिए एक फ़ंक्शन बना सकते हैं। अपने ऐप को बंद करने पर, आप बीज (फ़ाइल? डेटाबेस? बंदरों को अच्छी मेमोरी के साथ सहेज सकते हैं?) और फिर जब आप अपना नया ऐप शुरू करते हैं तो उसे बैक अप लें।

इसमें बैकअप उद्देश्यों या किसी चीज़ के लिए किसी भी पूर्व सहेजे गए बिंदु से पुनर्स्थापित करने की अनुमति देने का अतिरिक्त लाभ है।

+0

क्या आपके पास यह मानने का कारण है कि बीज कक्षा के सार्वजनिक (या संरक्षित) एपीआई का हिस्सा है? यदि बीज एक निजी कार्यान्वयन विवरण है, तो विरासत में मदद नहीं मिलेगी, व्युत्पन्न कक्षाओं तक पहुंच नहीं होगी। –

+0

@ एंथनी मैंने कहा कि मेरे पास स्रोत कोड नहीं है। मुझे लगता है कि मैं यह कहकर स्पष्ट हो सकता था कि मेरे पास इसका समर्थन करने के लिए निर्णायक सबूत नहीं हैं, इसलिए नहीं, मैं नहीं करता हूं। मेरे लिए, यह आपके संरक्षित एपीआई में शामिल करने के लिए कुछ तार्किक लगता है। – corsiKa

+0

मैं इसे देख लूंगा, क्योंकि मुझे कुछ जांच के साथ सीरियलाइजेशन – Fredou

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

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