Maison >développement back-end >C++ >Comment optimiser la lecture de fichiers binaires dans un vecteur de caractères non signés ?
Optimisation de la lecture des fichiers binaires
Pour lire de manière optimale les fichiers binaires dans un vecteur de caractères non signés, envisagez les stratégies suivantes :
Méthode 1 : Construction de vecteur personnalisé
<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>
Cette méthode crée explicitement un vecteur avec la taille correcte en fonction de la taille du fichier. Cependant, il convertit les données du vecteur en char*, ce qui n'est pas souhaitable.
Méthode 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>
Cette méthode utilise un itérateur qui lit les données dans un tampon de caractères en interne. Bien qu'elle soit plus courte, elle nécessite toujours des itérateurs de caractères malgré la lecture de caractères non signés.
Méthode 3 : spécialisation Ifstream de base
<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>
Cette méthode utilise un flux de fichier d'entrée spécialisé pour les caractères non signés. Cependant, cela peut ne pas être approprié dans tous les cas.
Optimisations
Considérations
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!