Effizientes Einlesen von Binärdateien in einen Vektor aus vorzeichenlosen Zeichen
Methoden zum Lesen von Binärdateien
Um eine Binärdatei effizient in einen Vektor aus vorzeichenlosen Zeichen (std::vector
Methode 1:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); std::streampos fileSize = file.tellg(); std::vector<BYTE> fileData(fileSize); file.read((char*) &fileData[0], fileSize); return fileData; }</code>
Diese Methode öffnet die Datei und verwendet file.seekg/file.tellg, um ihre Größe zu bestimmen. Anschließend wird ein Vektor mit der entsprechenden Größe zugewiesen und die Daten gelesen. Es erfordert jedoch eine explizite Umwandlung in char*, was unpraktisch sein kann.
Methode 2:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); return std::vector<BYTE>((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); }</code>
Diese Methode verwendet std::istreambuf_iterator zum Durchlaufen die Zeichen der Datei und konstruieren den Vektor, aber es erfordert eine Umwandlung in char, obwohl der Vektor vorzeichenlose Zeichen speichert.
Methode 3:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::basic_ifstream<BYTE> file(filename, std::ios::binary); return std::vector<BYTE>((std::istreambuf_iterator<BYTE>(file)), std::istreambuf_iterator<BYTE>()); }</code>
Diese Methode verwendet direkt ein std::basic_ifstream mit dem gewünschten Typ BYTE, wodurch die Notwendigkeit einer Umwandlung entfällt.
Bedienung hinter den Kulissen:
Bei Verwendung von std::istreambuf_iterator Die zugrunde liegenden Vorgänge umfassen das Lesen aus dem internen Puffer der Datei und das Konvertieren der char-Daten in den gewünschten Typ (in diesem Fall BYTE). Aufgrund dieses Konvertierungsprozesses können jedoch einige Leistungsprobleme auftreten.
Leistungsoptimierung:
Um die Leistung zu optimieren, berücksichtigen Sie Folgendes:
Das obige ist der detaillierte Inhalt vonWie liest man Binärdateien effizient in einen Vektor aus vorzeichenlosen Zeichen ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!