Heim >Backend-Entwicklung >C++ >Wie kann das Lesen von Binärdateien in einen Vektor mit vorzeichenlosen Zeichen optimiert werden?
Optimierung des Lesens von Binärdateien
Um Binärdateien optimal in einen Vektor mit vorzeichenlosen Zeichen einzulesen, sollten Sie die folgenden Strategien in Betracht ziehen:
Methode 1: Benutzerdefinierter Vektor Konstruktion
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); std::streampos fileSize = file.tellg(); file.seekg(0, std::ios::beg); std::vector<BYTE> fileData(fileSize); file.read((char*) &fileData[0], fileSize); return fileData; }</code>
Diese Methode erstellt explizit einen Vektor mit der richtigen Größe basierend auf der Dateigröße. Allerdings werden die Daten des Vektors in char* umgewandelt, was unerwünscht ist.
Methode 2: Istreambuf-Iterator
<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 einen Iterator, der Daten einliest ein char-Puffer intern. Obwohl es kürzer ist, erfordert es trotz des Lesens von vorzeichenlosen Zeichen immer noch Char-Iteratoren.
Methode 3: Grundlegende Ifstream-Spezialisierung
<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 einen speziellen Eingabedateistream für vorzeichenlose Zeichen. Es ist jedoch möglicherweise nicht für alle Fälle geeignet.
Optimierungen
Überlegungen
Das obige ist der detaillierte Inhalt vonWie kann das Lesen von Binärdateien in einen Vektor mit vorzeichenlosen Zeichen optimiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!