2010-09-17 22 views
5

Obecnie mam program, który wczytuje dane binarne do stringstream a następnie pases dane do fstream tak:Jak skopiować dane binarne z jednego strumienia do drugiego?

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; 

Moje pytanie brzmi: czy jest lepszy sposób, aby przekazać dane binarne między strumieniami?

Odpowiedz

13

Użyj członków streambuf, to właśnie one są dla:

fout << ss.rdbuf(); 
+0

isnt "operator <<" dla wejścia Sformatowany? pracuję z danymi binarnymi. – Fabi1816

+0

@ Fabi1816: Istnieje przeciążenie dla 'streambuf', które ma wyjście binarne. To przeciążenie jest tutaj, aby zrobić dokładnie to, o co tutaj prosisz. –

+4

To jest poprawne funkcjonalnie. Zauważyłem, że kopiowanie danych strumieniami C++ jest 2-3 razy wolniejsze niż przy użyciu metod w stylu C zamieszczonych powyżej. Ku mojej irytacji. – Stephen

Powiązane problemy