Lecture efficace de fichiers binaires dans un vecteur de caractères non signés
Méthodes de lecture de fichiers binaires
Pour lire efficacement un fichier binaire dans un vecteur de caractères non signés (std::vector
Méthode 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>
Cette méthode ouvre le fichier et utilise file.seekg/file.tellg pour déterminer sa taille. Il alloue ensuite un vecteur de taille appropriée et lit les données. Cependant, cela nécessite une conversion explicite en char*, ce qui peut être gênant.
Méthode 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>
Cette méthode utilise std::istreambuf_iterator pour parcourir les caractères du fichier et construire le vecteur, mais cela nécessite une conversion en char même si le vecteur stocke des caractères non signés.
Méthode 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>
Cette méthode utilise directement un std::basic_ifstream avec le type souhaité, BYTE, évitant le besoin de casting.
Opération en coulisses :
Lors de l'utilisation de std::istreambuf_iterator, les opérations sous-jacentes impliquent la lecture du tampon interne du fichier et la conversion des données char dans le type souhaité (BYTE dans ce cas). Cependant, en raison de ce processus de conversion, certains problèmes de performances peuvent survenir.
Optimisation des performances :
Pour optimiser les performances, pensez à :
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!