c++ - asio::streambuf 是否支持定位(即多个输入流)?
问题描述
在我的项目中,我使用的是谷物和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
工作来重置位置。
解决方案
推荐阅读
- web-applications - 具有大量页面的现代 Web 应用程序的架构
- bash - Bash:如何执行路径
- spring-boot - Spring Boot Webclient:如何从 ClientResponse 访问响应状态原因短语
- google-apps-script - 是否有用于验证 Apple ID (IDFA) 和 Android ID (GAID) 的 Google 表格公式
- java - Spring Kafka:关闭容器并使用 ConcurrentKafkaListenerContainerFactory 从特定偏移量读取消息
- reactjs - 有没有办法在每次点击时在反应博览会中刷新 HomeStacks 屏幕的内容?
- python - ValueError:在对整数值进行回归时没有为任何变量提供梯度,其中包括使用 keras 的负数
- verilog - 如何使用 Vivado 原理图创建缓冲门?
- python - 我可以在 Python 中创建自定义 Style() 类吗
- flutter - 底部溢出 125 像素