2010-12-01 22 views
5

J'ai ouvert un fichier en mode binaire et aime écrire dans un fichier.Quelle est la différence entre ofstream "<<" et Write

ofstream ofile("file.txt",ios_base::binary) 
    int a = 1; 
    float f = 0.1; 
    string str = 10; 
    ofile<<a<<f<<str; 

savoir ce que la différence entre l'écriture en utilisant « < < » et en utilisant « ofile.write ». qui est le meilleur et le plus efficace pour écrire en mode binaire.

+1

C'est un total devinez, mais je parie que 'operator <<' est implémenté en utilisant 'write()' – Falmarri

Répondre

5

L'opérateur < < formatera vos données au format texte. Considérant que l'écriture produira des données dans le même format que c'est stocké dans le RAM. Donc, si vous écrivez des fichiers binaires, vous voulez utiliser write. Cependant, si vous écrivez des types non-pod, vous devez faire attention. Vous ne pouvez pas dire simplement:

write(&mystring, sizeof(std::string)); 

Vous devez avoir un moyen de sortir les données réelles, qui ne sont pas stockées dans la classe ou se struct.

+0

Je suppose qu'il devrait écrire '(& mystring, mystring.size())' – Dilawar

+0

@Dilawar: Non, c'est encore plus faux. Les données de caractères ne sont pas stockées dans l'objet de chaîne lui-même. Il est alloué dynamiquement séparément et référencé par un pointeur. Vous pouvez utiliser 'mystring.c_str()', mais vous devez également stocker la taille elle-même si vous voulez être capable de la récupérer correctement. –

1

AFAIK write transmet la valeur 'tel quel' où l'opérateur < < effectue une mise en forme.

Pour plus voir here il a des points de balle énumérant certaines des caractéristiques.

Comme mentionné précédemment, pour les données binaires est est généralement préférable d'utiliser écriture comme produit juste les données sans aucune mise en forme (ce qui est très important pour les données binaires en tant que mise en forme supplémentaire peut invalider le format)