2008-11-25 22 views
5

पर आउटपुट करने का सबसे अच्छा तरीका क्या है, मैं सोच रहा हूं कि एक स्ट्रीम से पढ़ने के लिए बाइट बफर और लूपिंग का उपयोग करने के अलावा, बेहतर/अंतर्निहित तरीका है या नहीं, दूसरा (.NET में)। आम तौर पर यह एक धारा में एक परिवर्तन लागू करने और इसे स्थानांतरित करने के लिए किया जाता है।एक धारा के आउटपुट को

इस उदाहरण में, मैं एक फ़ाइल क्या लोड हो रहा हूँ, (त्रुटि सादगी के लिए हटा दिया हैंडलिंग) एक Deflate धारा के माध्यम से डालने और एक फाइल करने के लिए इसे बाहर लेखन:

byte[] buffer = new byte[10000000]; 
using (FileStream fsin = new FileStream(filename, FileMode.Open)) 
{ 
    using (FileStream fsout = new FileStream(zipfilename, FileMode.CreateNew)) 
    { 
     using (DeflateStream ds = new DeflateStream(fsout, CompressionMode.Compress)) 
     { 
      int read = 0; 
      do 
      { 
       read = fsin.Read(buffer, 0, buffer.Length); 
       ds.Write(buffer, 0, read); 
      } 
      while (read > 0); 
     } 
    } 
} 
buffer = null; 

संपादित करें:

.NET 4.0 में अब Stream.CopyTo फ़ंक्शन है, हैललुजा

उत्तर

5

इससे वास्तव में एक बेहतर तरीका नहीं है, हालांकि मैं लूपिंग भाग को CopyTo एक्सटेंशन विधि में डालता हूं, उदा।

public static void CopyTo(this Stream source, Stream destination) 
{ 
    var buffer = new byte[0x1000]; 
    int bytesInBuffer; 
    while ((bytesInBuffer = source.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     destination.Write(buffer, 0, bytesInBuffer); 
    } 
} 

जो तुम तो कह सकते हैं के रूप में:

fsin.CopyTo(ds); 
+0

हाँ है, मैं अगर हम 3.5 पर थे इस करना होगा। आम तौर पर हम इसे एक स्थिर विधि पुस्तकालय में डाल देते हैं। –

+0

दरअसल, इसे 3.5 से पहले StreamCopier.Copy कहा जाता था .-) –

+1

ध्यान दें कि यदि आप .NET 2.0 का उपयोग कर रहे हैं तो यह ठीक है, जब तक आप C# 3 का उपयोग कर रहे हों। आप अभी भी थोड़ा सा एक्सटेंशन विधियों का उपयोग कर सकते हैं चालबाजी का। Http://csharpindepth.com/Articles/Chapter1/Versions.aspx –

1

अब जब मैं इसके बारे में सोचता हूं, तो मैंने इनपुट आउटपुट के परिणामों को सीधे आउटपुट स्ट्रीम में पाइप करने के लिए कोई भी अंतर्निहित समर्थन नहीं देखा है 'डी डी चिह्न। This article on MSDN में "स्ट्रीमपलाइन" श्रेणी के लिए कुछ कोड है जो आपके द्वारा वर्णित की जाने वाली चीज़ों की तरह करता है।

3

.NET 4.0 अब एक Stream.CopyTo समारोह

+0

एक्सेलेंट देखें! धन्यवाद –

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