首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无缓冲的std streambuf实现

无缓冲的std streambuf实现
EN

Stack Overflow用户
提问于 2011-08-18 19:56:43
回答 1查看 2.2K关注 0票数 5

为了快速测试序列化库,我想创建一个能够对套接字进行读写的streambuf。我不想在streambuf中使用缓冲区,但让套接字处理这个问题。我确信序列化库只会调用std::istream::readstd::ostream::write。快速浏览一下微软的basic_streambuf实现就会发现,这些调用实际上是直接转发到xsputnxsgetn的。

问题是:我是否可以从streambuf派生并只实现xsputn和xsgetn,并确保使用我的实现的流将始终调用这些方法,而不是sync/overflow/underflow/pback/...?或者我应该重写sync etc以返回错误,或者标准是否保证默认实现是正常的?最好是在任何公共平台上都能工作,而且我不能使用boost::iostreams。

实际上,我会使用这样的东西:

代码语言:javascript
复制
class socket_buf : public std::streambuf
{
public:
    //Socket is a class with std::stream-like read/write methods
  MyBuf( Socket& s ) : sock( s ) {}

protected:
  std::streamsize xsputn( const char* s, std::streamsize n )
  {
    return sock.write( s, n );
  }

  std::streamsize xsgetn( char* s, std::streamsize n )
  {
    return sock.read( s, n );
  }

private:
  Socket& sock;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-18 20:04:25

它(几乎?)无法在没有缓冲区的情况下实现std::streambuf。您将不得不重载underflowoverflow,因为许多到std::streambuf的公共接口不会通过xsputnxsgetn。例如sputcsbumpc等。根据内部缓冲器的状态和特定std::streambuf实现,即使sputn也不能保证引起调用xsputn

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7107025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档