Para mejorar la lectura de rendimiento de un archivo, intento leer todo el contenido de un gran archivo (varios MB) en la memoria y luego utilizar un istringstream para acceder a la información.¿Cómo leer el contenido del archivo en istringstream?
Mi pregunta es, ¿cuál es la mejor manera de leer esta información e "importarla" en el flujo de cadenas? Un problema con este enfoque (ver a continuación) es que al crear la secuencia de cadenas, los búferes se copian y el uso de la memoria se duplica.
#include <fstream>
#include <sstream>
using namespace std;
int main() {
ifstream is;
is.open (sFilename.c_str(), ios::binary);
// get length of file:
is.seekg (0, std::ios::end);
long length = is.tellg();
is.seekg (0, std::ios::beg);
// allocate memory:
char *buffer = new char [length];
// read data as a block:
is.read (buffer,length);
// create string stream of memory contents
// NOTE: this ends up copying the buffer!!!
istringstream iss(string(buffer));
// delete temporary buffer
delete [] buffer;
// close filestream
is.close();
/* ==================================
* Use iss to access data
*/
}
Te gusta copiar los datos. 1) Copiar en el búfer. 2) Copiar en std :: string anónimo. 3) Copia en iss. –
Quizás debería buscar en los archivos mapeados en memoria. –