2010-09-17 21 views
5

Actuellement, j'ai un programme qui charge les données binaires dans un stringstream et Pases ensuite les données à un fstream comme ceci:Comment copier des données binaires d'un flux à un autre?

stringstream ss(stringstream::binary | stringstream::in | stringstream::out); 
ss.write(data, 512); // Loads data into stream 

// Uses a memory block to pass the data between the streams 
char* memBlock = new char[512]; 
ss.read(memBlock, 512); 

ofstream fout("someFile.bin", ios::binary); 
fout.write(memBlock, 512); // Writes the data to a file 
fout.close(); 

delete[] memBlock; 

Ma question est: est-il une meilleure façon de transmettre les données binaires entre les flux?

Répondre

13

Utilisez les membres streambuf, c'est ce qu'ils sont pour:

fout << ss.rdbuf(); 
+0

isnt "opérateur <<" pour entrée formated? Je travaille avec des données binaires. – Fabi1816

+0

@ Fabi1816: Il y a une surcharge pour 'streambuf' qui produit une sortie binaire. Cette surcharge est ici pour faire exactement ce que vous demandez ici. –

+4

Ceci est fonctionnellement correct. J'ai trouvé que copier des données avec des flux C++ est 2-3 fois plus lent que d'utiliser les méthodes de style C affichées ci-dessus. À mon grand désagrément. – Stephen