问题标签 [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 回答
259 浏览

c++ - 为什么 basic_streambuf::pubseekoff() 不是纯虚函数?

如果您查看<streambuf>VS2010 中的头文件,您会看到此成员函数的定义为

whereseekoff是一个虚函数,它在派生类中被覆盖,basic_filebuf并且basic_stringbuf在基类中什么都不做,basic_streambuf如下所示:

我找不到 的定义,_BADOFF但它可能是-1. 但这在这里真的无关紧要。这个函数 norpubseekoff永远不会被调用,因为该类basic_streambuf是一个抽象类(它的构造函数是受保护的)。

另请注意,gcc编译器使用相同的技术。为什么这两个编译器必须求助于seekoff()成员函数,而不是简单地声明pubseekoff为纯虚函数basic_streambuf并在每个派生类中定义它basic_filebufbasic_stringbuf

0 投票
1 回答
2177 浏览

c++ - 为自定义流类编写操纵器

我编写了一个自定义流类,它输出缩进文本并且具有可以更改缩进级别的操纵器。所有缩进工作都在自定义流缓冲区类中实现,该流类使用该类。缓冲区正在工作(即文本在输出中缩进),但我无法让我的操纵器工作。我在很多地方都在阅读 ostream(我的类扩展)如何重载 operator<<,如下所示:

这意味着它可以将函数作为参数。那么为什么我的“缩进”或“缩进”流函数没有被识别呢?我确定我必须对 operator<< 进行一些重载,但我不应该不需要吗?请参阅下面的代码:

谢谢!

0 投票
1 回答
954 浏览

c++ - streambuf 获取流位置

我将 C++streambuf类用于编译器项目,需要一种方便的方法来获取流中的当前位置。

有两个成员函数streambuf::pubseekpos和一个streambuf::pubseekoff, 来修改位置,我对没有streambuf::pubgetpos成员函数(或类似的东西)来阅读它感到很困惑。

似乎有两种可能的解决方法:

  1. 我可以将当​​前位置保存在一个单独的变量中,并在我从流中读取字符时手动修改它。

  2. 我可以调用streambuf::pubseekoff(0, ios_base::cur),它返回新的流位置。

对于这样一个微不足道的任务,第二个选项似乎有用但效率低下且不美观。有更好的方法吗?

0 投票
1 回答
1009 浏览

c++ - 无法设置 ostringstream 对象的 streambuf

我想std::ostringstream在我的程序中包含一些对象以用于记录和错误报告的目的。根据编译时给定的设置,日志和错误流将收集它们各自的数据(要保存或其他),或者它们将被重定向到std::coutstd::cerr(用于调试目的)。据我从参考资料(和这里)可以看出,std::ostringstream对象继承了该rdbuf()方法,并且我应该能够rdbuf()在流对象上调用该方法,将指针作为参数传递给与std::streambuf流相关联的指针。

但是,当我尝试编译时,我收到一个错误,因为没有匹配的函数调用,rdbuf()没有任何参数的方法被列为候选。

我从 g++ 得到的错误(Ubuntu 12.04 x86_64 上的 4.6.3):

这是源文件和头文件的精简版本:

http_utils.h

http_utils.cc

如果有人可以帮我解决这个问题,或者根据我正在尝试做的事情提出替代方法,我将不胜感激。

0 投票
1 回答
662 浏览

file - C ++如何使用pubseekoff确定和报告二进制文件中当前位置的偏移量?

我只使用 C++ 大约 6 个月,所以对于我在代码中犯的任何愚蠢错误,我深表歉意。

我正在开发一个项目,该项目会将二进制文件读入streambuf,然后在streambuf中搜索特定序列并报告二进制文件中的序列起始偏移量以及在二进制文件中找到特定序列的标识符。

要搜索的序列存储在一个称为 snortRules 的向量中,其中 snortRules 向量的每个索引都是存储为整数向量的单个序列。

最终,我需要创建一个文本文件,该文件将显示找到的偏移量和特定序列,以便与另一个应该匹配的文件进行比较,但现在我只是将结果打印到控制台窗口。

我的代码似乎正在工作,因为它报告找到了除单个问题之外的所有序列。出于某种原因,我有时会重复找到序列的偏移量。例如输出将是:

我认为我的问题是我没有使用 streambuf 的 pubseekoff 正确获得偏移量。

我的代码是:

我试图在 stackoverflow.com 和 cplusplus.com 上找到 pubseekoff 的文档和示例,但我能找到的对我来说没有多大意义,老实说,我不是 100% 确定这是我的问题......

非常感谢任何帮助或建议!

0 投票
1 回答
406 浏览

boost - 读取 boost::asio::streambuf 会产生不良数据

我正在使用 boost::asio 创建 TCP 客户端。我正在通过加载网站对其进行测试。我可以创建连接、读取、触发回调等,没问题。但是,在每个数据包中,我都发现了这个,或者类似的东西:

我想知道如何确定实际读取的内容的大小。在下面的代码中,假设我的套接字设置正确。我已经连接到一个 URL(一个普通的旧网站),发送了一个请求,并开始阅读。当我读取数据时,我得到了数据,加上一些额外的怪异。

下面是我从http://libcinder.org收到的第一个数据包的结果。

0 投票
1 回答
64 浏览

c++ - boost iostreaming 过滤器获取空值

我尝试使用 boost::iostreams 构建一个用于读取和写入 char* 的流缓冲区:

阅读效果很好:

但写作不起作用:

什么不见​​了?

谢谢

0 投票
0 回答
91 浏览

c++ - std::codecvt::unshift() 可能需要的最大输出大小是多少?

我正在处理一个自定义文件streambuf。现在,我想像这样在寻找时刷新fstream。此时我想知道输出的数组std::codecvt::unshift()应该有多大?在我看来,返回的大小std::codecvt::max_length()应该足够了。我的假设对吗?

0 投票
1 回答
217 浏览

c++ - 将 std::filebuf 限制为(归档)文件中的文件

我目前正在实现一个自定义std::filebuf,它从未压缩的 .zip 档案中读取文件。对于存档中的每个文件,我都有存档文件的偏移量和大小。现在我想将 filebuf 限制在间隔内[offset, offset+size],这样我就可以像pubseekoff()打开普通文件一样使用函数。例如,当我执行pubseekoff(5, std::ios::beg, std::ios::in);filebuf 时,实际上应该将它的底层 get-pointer 设置offset+5为归档文件中。

实现这一点的最佳方法是什么?我试图派生std::filebuf并覆盖诸如seekoff()执行本地文件偏移量的函数 - >存档文件偏移量转换,但这不起作用,因为底层的filebuf(至尊对我的存档偏移量一无所知)调用这些函数并抛出eof错误之类的。我还尝试从我的streambuf 中派生std::streambuf使用a std::filebuf,但这也不起作用,因为其中的大多数成员std::streambuf都受到保护。我可以在我的 streambuf 中使用 a std::ifstream,但这似乎很麻烦。

0 投票
1 回答
88 浏览

c++ - 实现定义的文件流同步 - 为什么?

使输入文件流实现特定于同步的基本原理是什么。流将用来自外部设备的内容(部分或全部)填充其缓冲区似乎不是很明显吗?它在标准 C++ IOStreams 和语言环境中说:

对于输出文件,同步定义为通过调用overflow(). 对于输入文件,同步的含义不是标准定义的,而是依赖于IOStreams库的实现。

使实现对称并让输入文件流的缓冲区调用就足够了underflow()吗?这个决定的原因是什么?