2

我已经实现std::basic_streambuf了派生包装器,围绕std::basic_filebuf它在编码之间进行转换。在这个包装器中,我对输入和输出都使用了一个缓冲区。缓冲技术来自这篇文章。

现在,我无法弄清楚的问题是这个。我的内部缓冲区在调用underflow. 根据文章,当从输入切换到输出时,缓冲区应该处于边缘状态。为此,我需要unget缓冲区中的未读数据。阅读文档和源代码,ungetputback不能保证成功。这将使我tellg在下一个输入操作时得到一个无效的指针。

我不是要求有人为我写这个,但我是在询问如何以std::basic_filebuf一种不会失败的方式管理 ungetting 数据的建议。

我认为,唯一确定的方法是计算将写入文件的字节并相应地调整偏移量。它并不像听起来那么简单。filebuf可能locale在编译时有一个关联的,未知的。我尝试获取方面并通过其out成员传递数据,但它不起作用。之前读取的数据可能没有默认mbstate_t值,有些codecvt对象也写了BOM。

基本上,几乎不可能计算一段文件数据在通过codecvt.

我用“c”标记了这个问题,因为“c”文件流也适用于缓冲区,并且还使用 get 和 put 指针。std::basic_filebuf只是围绕“c”文件流的包装器。'c' 中的答案也适用于这个问题。

有人对如何在文件流上实现无限制的 unget 有任何建议吗?

4

0 回答 0