问题标签 [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 投票
3 回答
712 浏览

c++ - 标准流适配器

我的项目中有一个抽象类,它的派生类用于不同位置的输入/输出。它有虚拟方法readwrite

我需要一种在 std 流(std::istream 和 std::ostream)和此类之间的适配器,以将输入/输出重定向到这些方法。

因此,例如,如果

被调用,它会调用write方法。

我想我应该重载std::istreamstd::ostreamstd::streambuf,但不确定哪些方法。

实现这一点的更好方法是什么?

0 投票
0 回答
67 浏览

c++ - 以流式方式覆盖输出到 std::cout 的最后一行

你好,

这是我想要实现的目标。我想要一个流,默认输出到std::cout但也可以使用std::cerr,它允许覆盖最后输出的行。

我知道这不适用于 seekp,因为 std::cout 不可搜索。我规避这种情况的方法是改为输出'\b'字符。我也知道这个解决方案不允许返回一个队列,这很好。

我设法得到了一个解决方案,但它并不好(顺便说一下,链接中给出的版本适用于真正的控制台,即使它不适用于 ideone - ideone 显示\b为空白字符)。我想要一个像标准流这样的接口。就像是:

这应该输出"hello1\b\b\b\b\b\bhi"std::cerr用户只会看到"hi".

我设法通过继承得到了一些接近std::ostream的东西,std::streambuf但它没有编译(见链接)。

这个问题的解决方案是什么?请注意,我并不特别喜欢我的解决方案。任何让我实现“流式”的解决方案都可以。

0 投票
1 回答
175 浏览

c++ - std::streambuf::in_aval 总是为 std::ostream 返回 0

我的目标是获取存储在streambuf. 我的想法是streambuf通过rdbuf然后使用sgetn.

我希望得到 10,但我从in_avail方法返回 0。

0 投票
3 回答
3069 浏览

c++ - asio::async_read_until:处理多行的健壮和优雅的方式

我使用asio::async_read_untilwith '\n'delimiter 来支持从服务器获取字符数据的 TCP 客户端。该服务器连续发送'\n'终止的线路;准确地说,它可以一次写入单行或多行的串联字符串。

从文档中,我了解到asio::async_read_until可以阅读:

  • 一个'\n'终止的行,例如"some_data\n". 这是最简单的情况,通过std::getline对与asio::streambuf
  • 一个'\n'终止的行加上下一行的开头,例如"some_data1\nbla". 这可以用std::getline; 第二行的其余部分将在下一次完成处理程序调用中处理。
  • 多行;在这种情况下,新读取的数据可能包含 2 个或更多'\n'. 我怎么知道std::getline我应该打多少电话,知道我不想冒险拨打std::getline不完整的线路(我最终会在未来的数据包中获得)?我应该查看流缓冲区以检查是否存在多个'\n'?甚至可以不做很多副本吗?
0 投票
1 回答
446 浏览

c++ - C++ STL 流缓冲异常处理

streambuf在这里,我有这个ostream结构(从这里修改http://wordaligned.org/articles/cpp-streambufs),我尝试throw从代码中的两点开始。但是我永远无法在程序中捕获这些异常main()并且程序正常退出。这是什么原因?

0 投票
2 回答
1867 浏览

c++ - 如何实现自定义 std::streambuf 的 seekoff()?

我有以下基于例如这个问题和答案的实现

我想通过以下方式在我的方法中使用它:

然后调用 eg tellg()onin并获得正确的结果。

到目前为止,它几乎是完美的——它不会在流的尽头停止。

我应该如何升级它以使其正常工作?

我的主要动机是模仿std::ifstream行为,但char[]在测试中将二进制文件输入它们(而不是依赖二进制文件)。

0 投票
0 回答
137 浏览

c++ - 从 boost serial_port 读取每隔几次读数就会读取不正确的数据

我在我的流缓冲区中放置了一个字符串,格式为"000.3\r\n 000.3\r\n ...". 每隔几个读数我就会捕捉到一个".3\r\n 000.3\r\n ...因为,我每帧只从缓冲区读取一次,当绘制到屏幕上时,值的突然跳跃变得明显。我应该如何测试缓冲区是否准备好读取?只需检查我的小数点后是否有 000?或者有没有更好的方法来检查正确的数据?

初始化端口:

从端口读取:

0 投票
1 回答
909 浏览

c++ - 为 C++ ostream 自定义流缓冲区

我正在为输出流实现自己的流缓冲区。基本上,它是一个类似向量的流缓冲区,其中每次溢出函数都会简单地将缓冲区重新分配为两倍大。同步函数会将所有数据写入文件描述符指定的设备fd

cout但是,我在用我自己的缓冲区替换时遇到了段错误。在与 GDB 苦苦挣扎后,我找不到错误在哪里。

这个实现有什么问题吗?我看到许多文章通常是压倒性的sync并且overflow是必需的。

0 投票
1 回答
139 浏览

c++ - 流缓冲区之间的数据块级复制

我想在实例之间有效地复制数据。std::streambuf也就是说,我想在它们之间铲起数据块,而不是执行逐个字符的复制。例如,这不是我要找的:

为此存在语法糖,并进行了更多的错误检查:

operator<<(basic_streambuf<..>*)这是我的标准库(Mac OS X,XCode 7)中实现的片段:

底线是:这仍然是按字符复制。我希望标准库使用一种算法,该算法依赖于流缓冲区的块级成员函数,sputnsgetn不是按字符传输。标准库是否提供这样的算法,还是我必须自己推出?

0 投票
1 回答
340 浏览

c++ - 为 gzip 流编写自定义 streambuf 的问题

我正在实现自己的 streambuf 类来编写压缩输出文件。这是它的样子。

然后我相应地从这个基础 newigzstreambufogzstreambuf类中派生出输入和输出流缓冲区。基本上,实现是按照 Nicolai M. Josuttis [C++ 标准库,The: A Tutorial and Reference] 一书中的示例完成的。

让我们只看ogzstream's 的实现。

所以,问题是tellp()对我自己实现的ogzstream对象(ogzstreambuf内部保存一个实例)的调用返回-1(EOF)值,因为:

在内部,如果成员失败返回 true,则函数返回 -1。否则,它返回rdbuf()->pubseekoff(0,cur,out)

引用自cpp。最后flush_buffer()返回0,因为pptr() - pbase();等于0

结果,pubseekoff()返回EOFtellp()失败。我想了解我在实施过程中遗漏了什么,以及我应该做些什么来改善这种认识。