2010-10-31 10 views
13

Tengo que copiar varios bytes de istream a ostream, hay 2 formas que conozco para realizar esta copia.Copia de control rápido de istream a ostream

myostream << myistream.rdbuf(); 

y

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

he encontrado que rdbuf versión es al menos el doble de rápido que el copy.
Aún no he encontrado la manera de copiar, digamos 100 bytes, pero como el tamaño que se va a copiar será probablemente bastante grande, me gustaría poder utilizar la versión rdbuf si es posible.

¿Alguien sabe cómo limitar esas copias a un número determinado de bytes?

Respuesta

9

¿Se puede usar 0x? Si es así, entonces usted puede utilizar copy_n:

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

EDIT 1:

Sé que probablemente está buscando una solución de la biblioteca, y que probablemente se podría haber dado cuenta de esto por su cuenta. Sin embargo, en caso de no haber pensado en algo como esto, esto es lo que yo haría (si no tuviera 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

desearía poder hacerlo, no por el momento, aunque! –

Cuestiones relacionadas