首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual::stringstream pubsetbuf不工作

Visual::stringstream pubsetbuf不工作
EN

Stack Overflow用户
提问于 2012-04-07 12:15:07
回答 3查看 2.1K关注 0票数 3

pubsetbuf std::成员在Visual 2010中根本不工作!

守则:

代码语言:javascript
复制
char *FileData = ... ;
unsigned long long FileDataLen = ... ;
std::stringstream *SS = new std::stringstream(std::stringstream::in | std::stringstream::out);
SS->rdbuf()->pubsetbuf( FileData, (std::streamsize)FileDataLen );

pubsetbuf在Visual中什么也不做!

解决方案#1

代码语言:javascript
复制
std::stringstream *SS = new std::stringstream( std::string(FileData, (size_type)FileDataLen ) ),std::stringstream::in | std::stringstream::out);

解决方案#2

代码语言:javascript
复制
SS->rdbuf()->sputn(FileData, (streamsize)FileDataLen);

但这两种方法都会产生不必要的内存复制。我肯定需要一个工作的pubsetbuf成员::stringbuf。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-07 12:20:23

putsetbuf只对fstream有意义(从技术上讲,对于std::basic_filebuf),其中缓冲区和流是两种不同的东西。

对于stringstream (技术上来说,std::basic_stringbuf),它们是同一个std::std::basic_stringbuf

如果您需要一个在其外部的字符串上工作的流,请考虑std::strstream:或boost::iostreams::array_sink

票数 4
EN

Stack Overflow用户

发布于 2012-12-05 04:22:56

如果您需要更改rdbuf,请先调用ios.clear(),否则它将无法工作。

代码语言:javascript
复制
std::ifstream file("file1.txt"); // file1.txt contains "Welcome!"
std::stringstream ss;
ss << file.rdbuf();

std::cout << ss.str() << std::endl;

输出“欢迎!”

让我们用一个新文件再试一次。

代码语言:javascript
复制
// Empty it
file.close();
ss.str("");

// New file
file.open("file2.txt"); // file2.txt contains "Goodbye!"
ss << file.rdbuf();

std::cout << ss.str() << std::endl;

什么都不输出。

代码语言:javascript
复制
ss.clear();
ss << file.rdbuf();
std::cout << ss.str() << std::endl;
file.close();

输出“再见!”

票数 3
EN

Stack Overflow用户

发布于 2018-03-23 02:37:14

我也看到了同样的事情。我正在研究的场景肯定负担不起复制不必要的数据。根据basic_streambuf类中的注释,这似乎是有意的:

代码语言:javascript
复制
virtual basic_streambuf *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
    {   // offer buffer to external agent (do nothing)
    return (this);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10054396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档