किसी फ़ाइल से प्रदर्शन पढ़ने में सुधार करने के लिए, मैं स्मृति में एक बड़ी (कई एमबी) फ़ाइल की पूरी सामग्री को पढ़ने की कोशिश कर रहा हूं और फिर जानकारी तक पहुंचने के लिए एक आईटिंगस्ट्रीम का उपयोग कर रहा हूं।istringstream में फ़ाइल सामग्री को कैसे पढ़ा जाए?
मेरा प्रश्न है, इस जानकारी को पढ़ने और स्ट्रिंग स्ट्रीम में "इसे आयात" करने का सबसे अच्छा तरीका कौन सा है? इस दृष्टिकोण के साथ एक समस्या (देखें) यह है कि जब स्ट्रिंग स्ट्रीम बनाते हैं तो बफर कॉपी हो जाते हैं, और मेमोरी उपयोग युगल होता है।
#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
*/
}
आपको डेटा कॉपी करना पसंद है। 1) बफर में कॉपी करें। 2) अज्ञात std :: स्ट्रिंग में कॉपी करें। 3) जारी करने में कॉपी करें। –
शायद आपको इसके बजाय स्मृति मैप की गई फ़ाइलों में खोजना चाहिए। –