C++ asio::streambuf是否支持定位(即多个输入流)?
在我的项目中,我使用and(非boost)。谷物的序列化函数期望在流上运行(例如,C++ asio::streambuf是否支持定位(即多个输入流)?,c++,boost-asio,C++,Boost Asio,在我的项目中,我使用and(非boost)。谷物的序列化函数期望在流上运行(例如,std::ostream) 序列化不是问题,反序列化也不是问题——通常情况下。以下是我的反序列化函数的外观: template <typename ...Types> auto deserialize(asio::streambuf& buf, Types& ...data) -> std::enable_if_t<(sizeof...(Types) > 0)>
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...);
}
模板
自动反序列化(asio::streambuf&buf,类型和…数据)->std::enable\u if\u t 0)>
{
std::istream is(&buf);
谷类:二元不饱和脂肪酸(is);
ar(数据…);
}
除了is
导致缓冲区中的数据一旦被读取就会被销毁之外,它工作得非常好
是否可以在不释放数据的情况下读取
buf
(这样我就可以再次反序列化整个缓冲区)?streambuf::pubsekpos
和std::istream::seekg
都无法重置位置。为什么需要多次读取缓冲区?解析需要时间,可能是您可以复制刚刚解析的对象,或者更好地重用它们?基本上有多个处理程序称为(基于事件的系统)。一个处理程序可能开始部分反序列化缓冲区,然后决定不处理消息。在这种情况下,应该将缓冲区重置为开始,以便下一个处理程序可以使用它。为什么需要多次读取缓冲区?解析需要时间,可能是您可以复制刚刚解析的对象,或者更好地重用它们?基本上有多个处理程序称为(基于事件的系统)。一个处理程序可能开始部分反序列化缓冲区,然后决定不处理消息。在这种情况下,应该将缓冲区重置为开始,以便下一个处理程序可以使用它。