c ++ verwendet ifstream aus dem Speicher

7

Ich habe Code, der ifstream verwendet, um Daten aus einer Datei zu lesen, und alles funktioniert.

Jetzt möchte ich, ohne etwas Code zu ändern, diese Daten aus einem Speicher lesen, tatsächlich habe ich ein char * , das die Daten enthält ...

Wie kann ich meine char * -Daten in ein ifstream einfügen, ohne die Datei effektiv zu lesen?

    
ghiboz 27.11.2012, 13:10
quelle

5 Antworten

7

Wenn der Code, der ifstream& verwendet, leicht geändert werden kann, um istream& zu verwenden, können Sie problemlos zwischen ifstream und istringstream (zum Lesen von Daten aus dem Speicher):

%Vor%

Anrufer:

%Vor%     
hmjd 27.11.2012, 13:14
quelle
8

Die Standardbibliothek bietet einen speicherinternen istream , der auch beschreibbar ist: std::stringstream .

Sie müssen Ihren Code richtig abstrahieren, damit er ein generisches istream anstelle eines ifstream akzeptiert, ein stringstream erstellt, es mit Ihren Daten füllt und dieses an die Funktion übergibt.

Zum Beispiel:

%Vor%     
Jon 27.11.2012 13:13
quelle
6

Obwohl die Verwendung von std::istringstream (manchmal fälschlicherweise mit dem führenden i bezeichnet; eine solche Klasse existiert auch, ist aber teurer zu konstruieren, da sie auch einen Ausgabestrom einrichtet) ist sehr populär, denke ich Es lohnt sich, darauf hinzuweisen, dass dies mindestens eine Kopie der tatsächlichen Zeichenfolge ergibt (ich vermute, dass die meisten Implementierungen sogar zwei Kopien erstellen). Das Erstellen beliebiger Kopien kann mit einem trivialen Stream-Puffer vermieden werden:

%Vor%

Bei einem kleinen Speicherbereich spielt der Unterschied keine Rolle, obwohl die gespeicherte Zuordnung auch dort erkennbar sein kann. Für große Teile des Gedächtnisses macht es einen großen Unterschied.

    
Dietmar Kühl 27.11.2012 14:26
quelle
1

Sie suchen möglicherweise nach einem Stringstream. Ссылка . Ich habe das nur einmal benutzt und es ist eine lange Zeit, aber im Grunde können Sie von einem Ort im Speicher streamen.

    
Matthew 27.11.2012 13:14
quelle
0

In meinem Projekt verwende ich die write () und read () Methoden von iostream, da ich binäre Daten in einen Stringstream schreibe. Entschuldigung, der folgende Code wurde nicht getestet und hat wahrscheinlich Syntaxfehler (tippen von Office ... ;-), aber so etwas erlaubt es dir, in Speicher, Dateien und anderswo zu schreiben (z. B. Netzwerk-Sockets):

%Vor%     
wizard 03.06.2016 10:50
quelle

Tags und Links