2010-09-17 44 views
5

Hiện nay tôi có một chương trình tải dữ liệu nhị phân thành một stringstream và sau đó pases dữ liệu đến một fstream như vậy:Làm cách nào để sao chép dữ liệu nhị phân từ luồng này sang luồng khác?

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; 

Câu hỏi của tôi là: là có một cách tốt hơn để vượt qua các dữ liệu nhị phân giữa dòng?

Trả lời

13

Sử dụng streambuf thành viên, đó là những gì họ đang cho:

fout << ss.rdbuf(); 
+0

Isn't "operator <<" cho đầu vào formated? tôi đang làm việc với dữ liệu nhị phân. – Fabi1816

+0

@ Fabi1816: Có quá tải cho 'streambuf' có đầu ra nhị phân. Quá tải này là ở đây để làm chính xác những gì bạn yêu cầu ở đây. –

+4

Đây là chức năng chính xác. Tôi đã tìm thấy sao chép dữ liệu với các luồng C++ chậm hơn 2-3 lần so với sử dụng các phương thức kiểu C được đăng ở trên. Nhiều phiền toái của tôi. – Stephen

Các vấn đề liên quan