basic_istream aus anderem istream initialisieren?



  • Hallo,
    folgendes Problem:
    Ich habe ein ifstream<BYTE>-Objekt, und würde jetzt gerne einen basic_istream<BYTE> Stream so erzeugen, dass dieser neue Stream alle Bytes des originalen Streams ab einem bestimmten Byte enthält; d.h. dass die Bytes ab einem bestimmten Byte aus dem ifstream in das neue basic_istream Objekt kopiert werden.
    Gibt es da einen "direkten" Weg? In basic_streambuf konnte ich keine entsprechende Funktion finden (und basic_istream erfordert als Konstruktor ja so einen streambuf), und google hat auch nicht weitergeholfen.

    Vielen Dank schonmal,
    Gugi



  • Mit ios::rdbuf kommst du an den streambuf ran. Wenn du den basic_istream damit initialisiert müsstest du mit diesem anstatt vom ifstream lesen können.
    Aber aus deinem Post werde ich nicht schlau: ein ifstream<BYTE> ist doch ein basic_istream<BYTE>? Warum willst du unbedingt das Objekt downgraden? Der Sinn dahinter ist mir nicht ersichtlich.



  • Aber rdbuf liefert mir ja den kompletten Buffer, aber ich will einen Buffer, der alle Bytes AB einem bestimmten Byte enthält (d.h. am Anfang sollen ein paar fehlen).

    Eigtl. will ich ein basic_iostream<BYTE> erzeugen. Da könnte ich dann natürlich auch einfach durch alle Bytes im original Stream iterieren und dann hineinschreiben.
    Aber ich würde gerne wissen, ob es eben anders geht; d.h. wenn man eben 2 basic_istream's hätte und den zweiten mit dem ersten wie oben beschrieben initialisieren möchte.



  • Vielleicht sowas in der Art?

    std::ostringstream oss;
    	std::ifstream fin("test.txt", std::ios::in);
    
    	fin.seekg(10);
    
    	oss << fin.rdbuf();
    	std::cout << oss.str() << std::endl;
    


  • Gugi schrieb:

    Ich habe ein ifstream<BYTE>-Objekt, und würde jetzt gerne einen basic_istream<BYTE> Stream so erzeugen, dass dieser neue Stream alle Bytes des originalen Streams ab einem bestimmten Byte enthält;

    Hallo Gugi,

    ein stream-Objekt - egal ob i- oder ostrem enthält nie auch nur ein einziges Byte. Die Quelle bzw. Senke der Bytes ist in jedem Fall der darunterliegende Streambuf. Und auch der enthält die Bytes nur 'einmal' - will sagen, Du kannst Sie i.A. nur einmal lesen. Wenn Du also mit einem zweiten Stream auf dem gleichen Streambuf 'vorspulst', so sind die Zeichen auch für den ersten Stream bereits gelesen.
    Stelle Dir z.B. vor, die Bytes kommen aus einer RS232-Verbindung oder einer Socket-Verbindung. Ein Streambuf liest Zeichen (bzw. Bytes) nur nacheinander. Nur bei Dateien oder Memory (istringstream) kannst Du mehrfach lesen. D.h. das ist vom Device abhängig.

    Was hast Du denn genau vor?

    Gruß
    Werner


Log in to reply