1. 把文件读入到buffer
std::ifstream ifs("d:\\test.jpg", std::ios::in | std::ios::binary);
std::vector<char> data((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
注意:这里使用的是stream buffer的迭代器,而不是stream迭代器。因为这里的以binary把数据保存到buffer,若用stream,则以文本格式。
2. boost::iostream
boost::iostreams::stream<boost::iostreams::array_source> stream((const char*)buffer, sz);
然后跟使用istream一样使用即可。
3. 把buffer存入stream
stl提供的stream有fstream系列和stringstream系列。stringstream也可以存放binary格式。这里用boost提供的bufferstream,让代码看起来更简介。
boost::interprocess::bufferstream input_stream(&data[0], data.size());
output(input_stream, "test.jpg");