Maison > développement back-end > C++ > 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
Libérer: 2024-11-01 09:52:30
original
442 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal