Datei einlesen



  • Wie lese ich am performansten den Inhalt einer beliebeigen Datei ein?
    Macht es einen Unterschied, ob ich std::string, oder std::vector als "Container" dafür benutze?



  • afaik nicht solange du in grossen blöcken allozierst und liest.

    edit:
    du kannst dir auch überlegen ob du wirklich die gesamte datei auf einmal laden musst.



  • Was willste denn haben? Zeichen, Wörter, Zahlen,...?
    Prinzipiell gibt es keinen großen Unterschied zwischen std::string und std::vector<char>. Ersterer liefert nur Komfortfunktionen für Zeichenkettenspezifische Sachen.
    Alle Zeichen einer Datei zu extrahieren geht relativ schnell mit:

    std::string str{std::istreambuf_iterator<char>(file), istreambuf_iterator<char>()};
    

    Es ist aber immer besser, die Daten gleich so zu lesen, wie man sie haben will.



  • Nathan schrieb:

    Es ist aber immer besser, die Daten gleich so zu lesen, wie man sie haben will.

    Ist es das?
    Und wenn ich je nach Format zeichenweise lesen muss und daraufhin Entscheidungen beim Parsen treffen muss?

    Oder wird da gebuffert, so dass es im Mittel keinen Unterschied macht, ob ich 1 oder x (mit x <= Buffersize) Zeichen lese?



  • Skym0sh0 schrieb:

    Nathan schrieb:

    Es ist aber immer besser, die Daten gleich so zu lesen, wie man sie haben will.

    Ist es das?
    Und wenn ich je nach Format zeichenweise lesen muss und daraufhin Entscheidungen beim Parsen treffen muss?

    Dann liest man zeichenweise, bis man weiß, was man lesen muss und nutzt dann (ggf. nach unget), was man haben will.

    Oder wird da gebuffert, so dass es im Mittel keinen Unterschied macht, ob ich 1 oder x (mit x <= Buffersize) Zeichen lese?

    Die meisten streamubffer buffern, ja.


Log in to reply