2010-10-31 5 views
13

से फास्ट कंट्रोल कॉपी कॉपी करने के लिए मुझे istream से ostream पर कई बाइट कॉपी करना होगा, इस प्रतिलिपि को करने के लिए मुझे 2 तरीके हैं।आईएस्रीम से ओस्ट्रीम

myostream << myistream.rdbuf(); 

और

copy(istreambuf_iterator<char>(myistream), 
     istreambuf_iterator<char>(), 
     ostreambuf_iterator<char>(myostream) 
); 

मैंने पाया rdbuf संस्करण के रूप में तेजी से copy के रूप में कम से कम दो बार है।
मुझे अभी तक प्रतिलिपि बनाने का तरीका नहीं मिला है, 100 बाइट्स कहें, लेकिन आकार के आकार के रूप में शायद काफी बड़ा होगा, यदि मैं rdbuf संस्करण का उपयोग करने में सक्षम होना चाहता हूं।

क्या कोई जानता है कि उन प्रतियों को किसी बाइट्स को सीमित कैसे करें?

उत्तर

9

क्या आप 0x का उपयोग कर सकते हैं?

मैं जानता हूँ कि आप शायद एक पुस्तकालय समाधान के लिए देख रहे हैं, और आप शायद अपने दम पर बाहर इस लगा सकता है: यदि हां, तो आप copy_n उपयोग कर सकते हैं: 1

copy_n(istreambuf_iterator<char>(myistream), 
     100, 
     ostreambuf_iterator<char>(myostream) 
); 

संपादित करें। लेकिन अगर आपने ऐसा कुछ नहीं सोचा है, तो मैं यही करूंगा (अगर मेरे पास copy_n नहीं था):

void stream_copy_n(std::istream & in, std::size_t count, std::ostream & out) 
{ 
    const std::size_t buffer_size = 4096; 
    char buffer[buffer_size]; 
    while(count > buffer_size) 
    { 
     in.read(buffer, buffer_size); 
     out.write(buffer, buffer_size); 
     count -= buffer_size; 
    } 

    in.read(buffer, count); 
    out.write(buffer, count); 
} 
+0

मेरी इच्छा है कि मैं इस पल के लिए नहीं कर सकता! –

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