2010-09-17 3 views
5

В настоящее время у меня есть программа, которая загружает двоичные данные в stringstream, а затем Па данных в fstream как так:Как скопировать двоичные данные из одного потока в другой?

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; 

Мой вопрос: есть ли лучший способ передать двоичные данные между потоками?

ответ

13

Используйте streambuf членов, это то, что они предназначены для:

fout << ss.rdbuf(); 
+0

"не правда оператора <<" для отформатированный ввода? Я работаю с двоичными данными. – Fabi1816

+0

@ Fabi1816: Существует перегрузка для 'streambuf', которая выполняет двоичный вывод. Эта перегрузка здесь, чтобы делать именно то, что вы запрашиваете здесь. –

+4

Это функционально корректно. Я обнаружил, что копирование данных с потоками C++ будет в 2-3 раза медленнее, чем использование методов стиля C, опубликованных выше. К моему большому раздражению. – Stephen

Смежные вопросы