2012-04-27 17 views
7

मैं एक पीसी पर नेटवर्क-प्रकार स्ट्रीम का अनुकरण करना चाहता हूं।स्ट्रीम जिसमें अलग-अलग लेखन और पढ़ने की स्थिति है

मैंने इसे Stream बनाकर किया है जो 2 अंतर्निहित धाराओं में से एक है, एक को पढ़ने के लिए और दूसरे को लिखने के लिए।

मैं फिर 2 वर्गों को स्वैप करने वाले इस वर्ग के 2 उदाहरण बना देता हूं। वर्तमान में मैं 2 अंतर्निहित धाराओं के रूप में MemoryStream एस का उपयोग कर रहा हूं।

अब मुझे परेशानी है कि अगर मैं 0 बाइट्स को MemoryStream पर लिखता हूं तो इसकी स्थिति एक्स होगी और यदि मैं Read करता हूं तो मुझे कोई डेटा नहीं मिलता है, क्योंकि मैं स्ट्रीम के अंत में हूं।

यह देखते हुए कि मैं आम तौर पर कुछ पढ़/लिखता हूं (इसलिए प्रत्येक लिखने के बाद पद को 0 पर रीसेट नहीं किया जा सकता है) क्या Stream क्या मैं इस व्यवहार को प्राप्त करने के लिए उपयोग कर सकता हूं?

प्रभावी रूप से मैं एक प्रकार की बाइट कतार चाहता हूं जिसे मैं लिख सकता हूं और स्ट्रीम के रूप में पढ़ सकता हूं।

अर्थात (अनदेखी वास्तविक विधि तर्क)

MyStream.Write({ 1, 2, 3, 4, 5, 6 }); 
MyStream.Write({ 7, 8 }); 
MyStream.Read(3) // Returns { 1, 2, 3 } 
MyStream.Read(4) // Returns { 4, 5, 6, 7 } 

उत्तर

8

यह वास्तव में (वैसे भी मेरे मामले में) बहुत आसान की तुलना में मैंने सोचा है।
मैं बस बहाल/किसी भी आपरेशन प्रदर्शन से पहले पढ़ें/लिखें पदों रिकॉर्ड:

public class QueueStream : MemoryStream 
{ 
    long ReadPosition; 
    long WritePosition; 

    public QueueStream() : base() { } 

    public override int Read(byte[] buffer, int offset, int count) 
    { 
     Position = ReadPosition; 

     var temp = base.Read(buffer, offset, count); 

     ReadPosition = Position; 

     return temp; 
    } 

    public override void Write(byte[] buffer, int offset, int count) 
    { 
     Position = WritePosition; 

     base.Write(buffer, offset, count); 

     WritePosition = Position; 
    } 
} 
+0

केवल मुद्दा इस कोड को सुरक्षित थ्रेड नहीं है। यदि आप इस कोड का उपयोग एकाधिक थ्रेड के साथ कर रहे हैं, तो आप यह सुनिश्चित करना चाहेंगे कि एक ही समय में पढ़ने और लिखने के लिए कुछ भी प्रयास न करें। पढ़ें और लिखें विधियों के ऊपर आप [MethodImpl (MethodImplOptions.Synchronized)] को जोड़ सकते हैं (थ्रेड) सुरक्षित। – Qubei

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