2010-10-31 30 views
13

Tôi phải sao chép vài byte từ một số istream đến ostream, có 2 cách mà tôi biết để thực hiện bản sao này.Bản sao được điều khiển nhanh từ istream đến ostream

myostream << myistream.rdbuf(); 

copy(istreambuf_iterator<char>(myistream), 
     istreambuf_iterator<char>(), 
     ostreambuf_iterator<char>(myostream) 
); 

Tôi đã phát hiện ra rằng rdbuf phiên bản ít nhất hai lần nhanh như copy.
Tôi chưa tìm thấy cách sao chép chỉ, nói 100 byte, nhưng khi kích thước được sao chép có thể sẽ khá lớn, tôi muốn có thể sử dụng phiên bản rdbuf nếu có thể.

Có ai biết cách giới hạn các bản sao đó cho một số byte nhất định không?

Trả lời

9

Bạn có thể sử dụng 0x không? Nếu vậy, sau đó bạn có thể sử dụng copy_n:

copy_n(istreambuf_iterator<char>(myistream), 
     100, 
     ostreambuf_iterator<char>(myostream) 
); 

EDIT 1:

Tôi biết có lẽ bạn đang tìm kiếm một giải pháp thư viện, và bạn có thể có thể đã tìm ra này một mình. Nhưng trong trường hợp bạn không nghĩ về điều gì đó như thế này, đây là những gì tôi sẽ làm (nếu tôi không có copy_n):

void stream_copy_n(std::istream & in, std::size_t count, std::ostream & out) 
{ 
    const std::size_t buffer_size = 4096; 
    char buffer[buffer_size]; 
    while(count > buffer_size) 
    { 
     in.read(buffer, buffer_size); 
     out.write(buffer, buffer_size); 
     count -= buffer_size; 
    } 

    in.read(buffer, count); 
    out.write(buffer, count); 
} 
+0

Tôi ước tôi có thể, không phải cho thời điểm này! –

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