2010-10-31 18 views
13

istream'dan bir ostream'a birkaç bayt kopyalamak zorundayım, bu kopyayı gerçekleştirdiğimi bildiğim 2 yol var.Istream'den ostream'e hızlı kontrol edilen kopya

myostream << myistream.rdbuf(); 

ve ben rdbuf sürümü daha hızlı copy olarak en az iki katı olduğunu tespit ettik

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

.
Henüz kopyalama yolunu bulamadım, 100 byte'lar, ancak kopyalanacak boyut muhtemelen oldukça büyük olacağından, rdbuf versiyonunu kullanabilmeniz mümkün.

Bu kopyaları belirli bir bayt sayısına nasıl sınırlandıracağını bilen var mı?

cevap

9

0x kullanıyor musunuz? Ben muhtemelen bir kütüphane çözüm arıyorsanız biliyorum

ve muhtemelen kendi başınıza çözebilseydim:

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

DÜZENLEME 1: Eğer öyleyse, o zaman copy_n kullanabilirsiniz. Ama eğer böyle bir şey düşünmediyseniz, ben ne yapardım (burada kopyalamadım):

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

Keşke yapabilseydim, an için değil! –

İlgili konular