La mia domanda:
Quando hai un convertitore complesso come, che prende blocchi o set di risultati di grandi dimensioni da un database, alla fine lo converte in un file riga / risorsa, nel caso uno lo disegni come std::basic_streambuf
o è un std::basic_istream
o qualcosa di diverso, usando C ++ ?!
Per meglio descriverlo guarda il diagramma qui sotto o usa questo flusso di dati di testo:
A(ODB) -[maybe many rows]-> COSTLY CONVERSION -[many text lines]-> ???? --> std::istream
???? --> std::ofstream
???? --> std::ostream
Nota: il volume dei dati potrebbe essere ampio, da MB fino a GB, quindi i dati potrebbero essere convertiti in blocchi e pigri dal database, il che porterà a un blocco di righe di testo.
Il mio approccio assunto al momento per ???? era std::basic_streambuf
La mia ipotesi:
AFAIK il modo previsto di inserire dati da una fonte std::istream
in un altro std::ostream
sink, come std::ofstream
è di usare solo <<operator
con l'argomento% std::streambuf
, come
sink << source.rdbuf();
Sfondo
Sto progettando un modulo convertitore C ++, che prende dati personalizzati (cioè dati di misura), in questo esempio da un database mddb tramite la libreria C ++ odb , lo converte in un altro formato, chiamato df qui, e ora arriva la parte importante: rende disponibili i dati convertiti per almeno un std::istream
e anche un std::fstream
. Questo perché, il std::istream
può essere utilizzato per un download HTTP tramite l'interfaccia Wt Wt::WStreamRessource
e ovviamente il flusso del file, per memorizzare semplicemente i dati come file.