问题标签 [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.
c++ - 从 std::streambuf 继承时不兼容的析构函数编译器警告
我从std::streambuf
说析构函数不兼容继承时收到 ICL 编译器警告,有什么想法我在这里做错了吗?使其成为虚拟析构函数也不起作用。
警告 #809:虚函数“CAbcBuffer::~CAbcBuffer”的异常规范与覆盖函数“std::basic_streambuf<_Elem, _Traits>::~basic_streambuf [with _Elem=char, _Traits=std::char_traits] 的异常规范不兼容"
c++ - 创建一个 substreambuf 以从现有 istream 中读取
我正在尝试创建一个自定义std::streambuf
,它充当父流的子流。这是对此 SO 线程答案中概述的实现的改编。
在下面的这个例子中,我试图简单地读取"Hello,"
流的前 5 个字符。但是,当我调用 时ifstream.read()
,buffer
缓冲区充满了"ello, "
,就好像它被关闭了一样。
我是streambuf
s 的新手,我觉得我在这里遗漏了一些明显的东西。任何帮助,将不胜感激。
这是 的定义substreambuf
:
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;
,所以它应该可以工作。为什么它不起作用?
c++ - 为什么不从 ifstream 继承
我想创建一个自定义输入文件流,它会自动去除评论和其他垃圾数据。我想出了以下解决方案:
我也有ISerializable
包含Serialize/Deserialize
方法的接口。我觉得一切都很好。
但我读过我不应该继承std::ifstream
并应该创建 custom std::streambuf
。
您能否解释一下为什么继承不好std::ifstream
以及如何创建std::streambuf
以类似方式忽略评论和其他数据的自定义?
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] 进行接收吗?
我不确定如何设计这种通信以避免数据副本。
谢谢你的回答。
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 执行其他操作。
每种方法发生了什么?相比之下,它们的速度有多快?就缓冲区溢出、线程或其他我以后可能在网络客户端/服务器应用程序中遇到的陷阱而言,这些是否更不安全?
c++ - 用一串命令预加载 cin
我正在测试需要几个控制台命令才能执行的功能。不必每次我想测试特定方法的功能时都键入这些命令,我希望能够在我的源代码中粘贴一两行代码,有效地执行与键入命令相同的操作. 我尝试了以下代码,但似乎它只是无限循环。
c++ - std::stringstream 缓冲区操作
我正在将一些数据放入从 stringstream 获得的流 buf
我想要的是能够将一些虚拟数据放入这个缓冲区,然后在以后,一旦我有正确的数据,替换虚拟数据。
这些线上的东西:
我尝试使用 pubseekpos + sputn,但它似乎没有按预期工作。任何想法可能是正确的方法吗?
c++ - 如何返回streambuf指针
我已经编写了自己的输入流缓冲区,它应该适用于 gzip 压缩文件。这是它的界面:
我正在尝试编写函数,该函数将获取文件名并返回普通的streambuf,以防文件未压缩,否则返回gzstreambuf:
但是这个实现在非 gzip 文件的情况下不起作用,因为is
对象会在调用这个函数后被销毁。
我该如何解决这个问题?
c++ - C ++如何刷新std:stringbuf?
我需要将进程的标准输出(二进制数据)放入字符串缓冲区并在另一个线程中使用它。
这是制作人:
这是消费者:
事实证明,消费者无法获得生产者生产的所有字节。( tByte <> sb->in_avail()
)
这是一种内部缓冲问题吗?如果是,如何强制 stringbuf 刷新其内部缓冲区?