问题标签 [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++ - 标准流适配器
我的项目中有一个抽象类,它的派生类用于不同位置的输入/输出。它有虚拟方法read和write。
我需要一种在 std 流(std::istream 和 std::ostream)和此类之间的适配器,以将输入/输出重定向到这些方法。
因此,例如,如果
被调用,它会调用write方法。
我想我应该重载std::istream和std::ostream或std::streambuf,但不确定哪些方法。
实现这一点的更好方法是什么?
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
但它没有编译(见链接)。
这个问题的解决方案是什么?请注意,我并不特别喜欢我的解决方案。任何让我实现“流式”的解决方案都可以。
c++ - std::streambuf::in_aval 总是为 std::ostream 返回 0
我的目标是获取存储在streambuf
. 我的想法是streambuf
通过rdbuf
然后使用sgetn
.
我希望得到 10,但我从in_avail
方法返回 0。
c++ - asio::async_read_until:处理多行的健壮和优雅的方式
我使用asio::async_read_until
with '\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'
?甚至可以不做很多副本吗?
c++ - C++ STL 流缓冲异常处理
streambuf
在这里,我有这个ostream
结构(从这里修改http://wordaligned.org/articles/cpp-streambufs),我尝试throw
从代码中的两点开始。但是我永远无法在程序中捕获这些异常main()
并且程序正常退出。这是什么原因?
c++ - 如何实现自定义 std::streambuf 的 seekoff()?
我有以下基于例如这个问题和答案的实现
我想通过以下方式在我的方法中使用它:
然后调用 eg tellg()
onin
并获得正确的结果。
到目前为止,它几乎是完美的——它不会在流的尽头停止。
我应该如何升级它以使其正常工作?
我的主要动机是模仿std::ifstream
行为,但char[]
在测试中将二进制文件输入它们(而不是依赖二进制文件)。
c++ - 从 boost serial_port 读取每隔几次读数就会读取不正确的数据
我在我的流缓冲区中放置了一个字符串,格式为"000.3\r\n 000.3\r\n ..."
. 每隔几个读数我就会捕捉到一个".3\r\n 000.3\r\n ...
因为,我每帧只从缓冲区读取一次,当绘制到屏幕上时,值的突然跳跃变得明显。我应该如何测试缓冲区是否准备好读取?只需检查我的小数点后是否有 000?或者有没有更好的方法来检查正确的数据?
初始化端口:
从端口读取:
c++ - 为 C++ ostream 自定义流缓冲区
我正在为输出流实现自己的流缓冲区。基本上,它是一个类似向量的流缓冲区,其中每次溢出函数都会简单地将缓冲区重新分配为两倍大。同步函数会将所有数据写入文件描述符指定的设备fd
。
cout
但是,我在用我自己的缓冲区替换时遇到了段错误。在与 GDB 苦苦挣扎后,我找不到错误在哪里。
这个实现有什么问题吗?我看到许多文章通常是压倒性的sync
并且overflow
是必需的。
c++ - 流缓冲区之间的数据块级复制
我想在实例之间有效地复制数据。std::streambuf
也就是说,我想在它们之间铲起数据块,而不是执行逐个字符的复制。例如,这不是我要找的:
为此存在语法糖,并进行了更多的错误检查:
operator<<(basic_streambuf<..>*)
这是我的标准库(Mac OS X,XCode 7)中实现的片段:
底线是:这仍然是按字符复制。我希望标准库使用一种算法,该算法依赖于流缓冲区的块级成员函数,sputn
而sgetn
不是按字符传输。标准库是否提供这样的算法,还是我必须自己推出?
c++ - 为 gzip 流编写自定义 streambuf 的问题
我正在实现自己的 streambuf 类来编写压缩输出文件。这是它的样子。
然后我相应地从这个基础 newigzstreambuf
和ogzstreambuf
类中派生出输入和输出流缓冲区。基本上,实现是按照 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()
返回EOF
并tellp()
失败。我想了解我在实施过程中遗漏了什么,以及我应该做些什么来改善这种认识。