【发布时间】:2013-07-13 10:38:07
【问题描述】:
上下文
首先是一些上下文:Boost.Asio 服务器接收格式如下的请求:
- X 字节的 XML 元数据
- X 字节的可选二进制数据
我们有一个接受 std::istream 的 XML 解析器,因此很容易将 tcp::iostream 传递给这个函数。后面的二进制数据可能很重,所以我们应该异步读取——比如 500ko——的数据包,直到我们读取所有数据。
问题
我们可以先使用 tcp::iostream,然后使用带有下划线的 socket_streambuf 的 async_read 吗?当然编译没问题,但是socket上的读操作是否正确使用了tcp::iostream的内部缓冲区呢? (即使在读取元数据之后也可能不为空)。我想它应该尊重 Liskov 替换原则,但我更愿意确定。
我们可以随时随地从一种方法切换到另一种方法吗?
【问题讨论】:
标签: c++ boost-asio