问题标签 [streambuf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
640 浏览

c++ - 从 std::streambuf 继承时不兼容的析构函数编译器警告

我从std::streambuf说析构函数不兼容继承时收到 ICL 编译器警告,有什么想法我在这里做错了吗?使其成为虚拟析构函数也不起作用。

警告 #809:虚函数“CAbcBuffer::~CAbcBuffer”的异常规范与覆盖函数“std::basic_streambuf<_Elem, _Traits>::~basic_streambuf [with _Elem=char, _Traits=std::char_traits] 的异常规范不兼容"

0 投票
1 回答
395 浏览

c++ - 创建一个 substreambuf 以从现有 istream 中读取

我正在尝试创建一个自定义std::streambuf,它充当父流的子流。这是对此 SO 线程答案中概述的实现的改编。

在下面的这个例子中,我试图简单地读取"Hello,"流的前 5 个字符。但是,当我调用 时ifstream.read()buffer缓冲区充满了"ello, ",就好像它被关闭了一样。

我是streambufs 的新手,我觉得我在这里遗漏了一些明显的东西。任何帮助,将不胜感激。

这是 的定义substreambuf

0 投票
2 回答
939 浏览

c++ - 是否可以更改 ostringstream rdbuf?

我尝试以下代码:

但不幸的是,我收到了这个错误:

但是 rdbuf 有两个重载:

获取 (1) basic_streambuf<char_type,traits_type>* rdbuf() const;

设置 (2) basic_streambuf<char_type,traits_type>* rdbuf (basic_streambuf<char_type,traits_type>* sb);

是的,我知道它说basic_streambuf但它实际上只是一个 typedef typedef basic_streambuf<char> streambuf;,所以它应该可以工作。为什么它不起作用?

0 投票
3 回答
790 浏览

c++ - 为什么不从 ifstream 继承

我想创建一个自定义输入文件流,它会自动去除评论和其他垃圾数据。我想出了以下解决方案:

我也有ISerializable包含Serialize/Deserialize方法的接口。我觉得一切都很好。

但我读过我不应该继承std::ifstream并应该创建 custom std::streambuf

您能否解释一下为什么继承不好std::ifstream以及如何创建std::streambuf以类似方式忽略评论和其他数据的自定义?

0 投票
1 回答
1375 浏览

c++ - asio::streambuf 相对于原始数组的优势

我不太了解使用 streambuf 优于常规数组的优势。让我解释一下我的问题。我有一个网络连接,它使用 Rijndael 128 ECB + 一些简单的密码来加密小于 16 字节的剩余数据。数据包的结构为length_of_whole_packet+操作码+数据。我必须实际复制streambuf中的所有数据才能应用解密算法?为什么要再复制一份我已经拥有的数据?

我在发送数据时遇到了同样的问题。在安全模式下,数据包结构为 length_of_whole_packet+crc+data,其中 crc 和数据被加密。我可以像 MakePacket(HEADER, FORMAT, ...) 那样做一些怪物,它会分配数组、格式化数据包、添加 crc 并加密它,但我想避免使用 vararg 函数。我不能使用结构,因为数据包具有动态长度,因为其中可以有数组或字符串。如果我使用 MakePacket(unsigned char opcode, &streambuf sb) 那么 crc 就会再次出现问题 -> 必须制作副本来加密它。

我应该使用 vararg monstrosity 发送使用常规数组作为缓冲区并结合 unsigned char pbyRecvBuffer[BUFFERMAXLEN] 进行接收吗?

我不确定如何设计这种通信以避免数据副本。

谢谢你的回答。

0 投票
1 回答
3763 浏览

c++ - 使用 buffer_cast vs std::string vs ostringstream 将 streambuf 提升到 const char*

我有一个使用 boost::read_until 和 boost::streambuf 的客户端/服务器应用程序。我正在从套接字读取 XML 消息,并想用 tinyXML2 解析它,如下所示:

我需要以某种方式从 streambuf 中提取 const char *strPtr 。到目前为止,我在堆栈交换中找到了三种方法:

这三种方法都适用于我的代码(到目前为止)。方法 1 和 2 可能至少复制数据一次(或更多),而方法 3 执行其他操作。

每种方法发生了什么?相比之下,它们的速度有多快?就缓冲区溢出、线程或其他我以后可能在网络客户端/服务器应用程序中遇到的陷阱而言,这些是否更不安全?

0 投票
1 回答
154 浏览

c++ - 用一串命令预加载 cin

我正在测试需要几个控制台命令才能执行的功能。不必每次我想测试特定方法的功能时都键入这些命令,我​​希望能够在我的源代码中粘贴一两行代码,有效地执行与键入命令相同的操作. 我尝试了以下代码,但似乎它只是无限循环。

0 投票
2 回答
475 浏览

c++ - std::stringstream 缓冲区操作

我正在将一些数据放入从 stringstream 获得的流 buf

我想要的是能够将一些虚拟数据放入这个缓冲区,然后在以后,一旦我有正确的数据,替换虚拟数据。

这些线上的东西:

我尝试使用 pubseekpos + sputn,但它似乎没有按预期工作。任何想法可能是正确的方法吗?

0 投票
1 回答
665 浏览

c++ - 如何返回streambuf指针

我已经编写了自己的输入流缓冲区,它应该适用于 gzip 压缩文件。这是它的界面:

我正在尝试编写函数,该函数将获取文件名并返回普通的streambuf,以防文件未压缩,否则返回gzstreambuf:

但是这个实现在非 gzip 文件的情况下不起作用,因为is对象会在调用这个函数后被销毁。

我该如何解决这个问题?

0 投票
1 回答
764 浏览

c++ - C ++如何刷新std:stringbuf?

我需要将进程的标准输出(二进制数据)放入字符串缓冲区并在另一个线程中使用它。

这是制作人:

这是消费者:

事实证明,消费者无法获得生产者生产的所有字节。( tByte <> sb->in_avail())

这是一种内部缓冲问题吗?如果是,如何强制 stringbuf 刷新其内部缓冲区?