Maison  >  Article  >  développement back-end  >  Comment lire efficacement un fichier binaire dans un vecteur de caractères non signés ?

Comment lire efficacement un fichier binaire dans un vecteur de caractères non signés ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 09:52:30351parcourir

How to Efficiently Read a Binary File into a Vector of Unsigned Chars?

Moyens alternatifs de lire un fichier binaire dans un vecteur de caractères non signés

Votre fonction fournie pour lire un fichier binaire dans un vecteur de caractères non signés chars est une option viable, mais elle pourrait être simplifiée.

Utilisation de std::istreambuf_iterator

L'approche std::istreambuf_iterator est concise mais suppose l'utilisation de std : :istreambuf_iterator même lors de la lecture dans un vecteur de caractères non signés.

Utilisation de std::basic_ifstream

Le std::basic_ifstream L'approche indique explicitement l'intention de lire les BYTE, mais il n'est pas clair si c'est le choix le plus approprié.

Autres options

Une approche alternative qui évite la conversion explicite en char * est :

<code class="cpp">std::vector<BYTE> readFile(const char* filename)
{
    std::ifstream file(filename, std::ios::binary);
    file.unsetf(std::ios::skipws); // Prevent skipping newlines in binary mode
    std::streampos fileSize = file.tellg();
    file.seekg(0, std::ios::beg);

    std::vector<BYTE> fileData;
    fileData.reserve(fileSize);
    fileData.insert(fileData.begin(),
                     std::istream_iterator<BYTE>(file),
                     std::istream_iterator<BYTE>());
    return fileData;
}</code>

Cette méthode réserve la capacité nécessaire dans le vecteur avant d'insérer les données, éliminant potentiellement le besoin de redimensionnements coûteux.

Copie directe des données binaires

Une approche plus efficace consisterait à copier directement les données binaires dans le vecteur sans utiliser d'itérateur. Cependant, cela nécessite une implémentation spécifique à la plate-forme qui dépend de la bibliothèque d'E/S de fichiers sous-jacente.

Considérations sur les performances

Lorsque vous comparez les performances, envisagez de tester des fichiers binaires volumineux pour évaluer l'impact des redimensionnements vectoriels et les frais généraux des différentes approches.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn