问题标签 [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++ - 到 OLE IStream 的 std::ostream 接口
我有一个使用IStream的 Visual Studio 2008 C++ 应用程序。我想在std::ostream
. 像这样的东西:
为此,我实现了以下代码:
是的,代码可以编译并且似乎可以工作,但是我以前没有实现过的乐趣std::streambuf
。所以,我只想知道它是否正确和完整。
谢谢,保罗
c++ - 从 std::istreambuf_iterator<> 复制到 std::vector<>
我有一个 Visual Studio 2008 C++ 应用程序,我想将流视为一组迭代器。
例如,如果我要通过流接收 WIN32_FIND_DATA 结构数组,我希望能够执行以下操作:
为此,我定义了一个派生自的类std::basic_streambuf<>
:
我想不通的是如何优雅地从 s 数组转到byte
s 数组WIN32_FIND_DATA
。因为std::basic_streambuf<>
需要一个std::char_traits<>
模板参数,我的印象是它只能使用内置类型,如char
or byte
,而不是结构如WIN32_FIND_DATA
. 正确的?
关于如何使这项工作的任何建议?
谢谢,保罗
c++ - 从 streambuf 派生而不重写相应的流
几天前,我决定编写一个streambuf
可以使用mmap
和预读的子类会很有趣。我查看了我的 STL (SGI) 如何实现filebuf
并意识到它basic_filebuf
包含一个FILE*
. 所以继承自是不可能basic_filebuf
的。
所以我继承自basic_streambuf
. 然后我想将我的绑定mmapbuf
到一个 fstream。
我认为我唯一要做的就是复制filebuf
...的隐式接口,但这是一个明显的错误。在 SGI 中,basic_fstream
拥有一个basic_filebuf
. 无论我是否调用basic_filestream.std::::ios::rdbuf( streambuf* )
,文件流都会完全忽略它并使用它自己的filebuf
.
所以现在我有点困惑......当然,我可以创建自己的mmfstream
,这将是精确的复制/粘贴,fstream
但听起来真的不是面向 DRY。
我无法理解的是:为什么这样fstream
做与 紧密耦合filebuf
,以至于除了 a 之外不能使用任何东西filebuf
?分离流和缓冲区的全部意义在于可以使用具有不同缓冲区的流。
解决方案:
=>filestream
应该依赖filebuf
. 也就是说, fstream 应该由 streambuf 类模板化。这将允许每个人都可以向 a 提供自己的 streambuf 子类,fstream
只要它实现了filebuf
的隐式接口。问题:我们无法添加模板参数,fstream
因为它会在fstream
用作模板模板参数时破坏模板选择器。
=>filebuf
应该是一个没有任何附加属性的纯虚拟类。这样人们就可以从它继承而不携带它所有的 FILE* 垃圾。
你对这个主题的想法?
c++ - 如何为自定义 istream/streambuf 实现 seekg()?
十年前我曾经是一名 C++ 专家,但在过去的 10 年里,我一直在编写 Java。我刚刚开始了一个使用小型第三方 XML 解析器的 C++ 项目。XML 解析器接受 STL istream。我的 XML 数据来自 Windows COM IStream。我想我会做正确的事并创建一个适配器来获取 IStream 数据并通过 istream 将其呈现给 XML 解析器。
我按照http://www.mr-edd.co.uk/blog/beginners_guide_streambuf上的优秀教程创建了一个 COMStreambuf,它从底层 COM IStream 获取数据,并将其用作自定义 COMIstream 的缓冲区。一切看起来都不错,但我从解析器中得到一个读取错误。
结果解析器通过在 istream 上使用 seekg() 将整个文件读入内存以找出它的大小,然后使用 seekg() 回到开头一次性读取它。不出所料,前面提到的教程决定“为另一个帖子保存[实现搜索的说明]”,这显然从未写过。
有人能告诉我用我的自定义 istream/streambuf 实现 seekg() 需要做什么吗?我自己会冒险去做(我的第一个倾向是覆盖 istream 中的东西),但是由于我对 STL 的经验不够深入,加上我的 Java 心态,我担心我会做一些不完整的事情并且有一个脆弱的解决方案。(例如,如果不阅读教程,我永远不会猜到有人会通过编写新的 streambuf 来制作自定义 istream,或者我需要使用默认语言环境调用 imbue() 等)
谢谢你的帮助。这个网站给我留下了深刻的印象——参与者的知识和他们友好、诚实的天性承认谁有最好的答案。:)
c++ - 在执行 boost::asio::async_read 之后操作 streambuf 是否安全?
我知道在 async_write 工作时操纵 streambuf 是不安全的,正如 asio 作者在 boost 邮件列表中所述。我想知道的是,在 async_read 之后操作 streambuf 是否安全?
例子:
c++ - 关于streambuf溢出功能的查询
浏览溢出函数文档。我发现溢出有以下作为返回值。
返回值:
与 EOF 不同的值(或其他特征的 traits::eof() )表示成功。
如果函数失败,则返回 EOF(或其他特征的 traits::eof() )或抛出异常。
来源:“ http://www.cplusplus.com/reference/iostream/streambuf/overflow/ ”
谁能告诉我溢出功能在哪个场景中会通过异常?任何帮助将不胜感激
c++ - boost::asio::async_read 和 boost::asio::streambuf
我正在将 async_read 与 streambuf 一起使用。但是,我想将读取的数据量限制为 4,这样我就可以在进入正文之前正确处理标题。
如何使用 async_read 做到这一点?
c++ - boost.asio - 设置最大读取流大小
在http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/http/client/async_client.cpp有示例 HTTP 客户端 请帮助我更改最大缓冲区大小,如以下代码中所述(它来自与库一起下载的示例,而不是来自站点):
这是响应缓冲区的构造函数:
但是编译器说以下代码无效:
boost::asio::streambuf response_(
1024
);
似乎默认缓冲区是512
字节大小的,我需要更大的大小。
c++ - 从内存映射格式化文件中读取整数
我已经映射了一个大型格式化(文本)文件,每行包含一个整数,如下所示:
所以,我在第一个字节有一个指向内存的指针,在最后一个字节也有一个指向内存的指针。我正在尝试尽快将所有这些整数读入一个数组。最初,我创建了一个专门的 std::streambuf 类来使用 std::istream 从该内存中读取,但它似乎相对较慢。
您对如何有效地将“1231232\r\n123123\r\n123\r\n1231\r\n2387897...”之类的字符串解析为数组 {1231232,123123,1231,231,2387897,. ..} ?
文件中的整数数量事先是未知的。