在我的项目中,我使用的是cereal和asio(非增强型)。谷物的序列化功能希望在流上运行(例如std::ostream
)。
串行化不是问题,反序列化也不是问题-通常。这是我的反序列化功能的样子:
template <typename ...Types>
auto deserialize(asio::streambuf& buf, Types& ...data) -> std::enable_if_t<(sizeof...(Types) > 0)>
{
std::istream is(&buf);
cereal::BinaryInputArchive ar(is);
ar(data...);
}
这很好用,只是is
导致缓冲区中的数据一旦被读取就被破坏。
是否可以在不释放其数据的情况下从buf
进行读取(因此我可以再次反序列化整个缓冲区)? streambuf::pubseekpos
和std::istream::seekg
都无法重置位置。