2010-10-31 10 views
13

Devo copiare più byte da istream a ostream, ci sono 2 modi che conosco per eseguire questa copia.Copia veloce controllata da istream a ostream

myostream << myistream.rdbuf(); 

e

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

ho trovato che rdbuf versione è almeno due volte più veloce del copy.
Non ho ancora trovato il modo di copiare solo, diciamo 100 byte, ma dato che la dimensione da copiare sarà probabilmente abbastanza grande mi piacerebbe poter usare la versione rdbuf se possibile.

Qualcuno sa come limitare tali copie a un determinato numero di byte?

risposta

9

È possibile utilizzare 0x? Se è così, allora è possibile utilizzare copy_n:

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

EDIT 1:

So che probabilmente stai cercando una soluzione libreria, e si potrebbe probabilmente hanno capito questo da soli. Ma nel caso non avessi pensato a qualcosa del genere, ecco cosa farei (se non avessi 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

Vorrei poterlo fare, non per il momento però! –

Problemi correlati