C++转换文件流功能以使用字符串流

Tit*_*ito 5 c++ stringstream ifstream

我有大量的c ++类从文件流中读取数据.功能看起来像这样.

bool LoadFromFile(class ifstream &file);
Run Code Online (Sandbox Code Playgroud)

我正在创建一个新的函数来从内存而不是文件中读取.所以我google了一下,一个istringstream似乎没有任何修改代码.

bool LoadFromData(class istringstream &file);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是.我需要构造此流以从char数组中读取.该字符串不是以空值终止的,它是纯二进制数据,我得到了一个大小的整数.我尝试将其分配给字符串并从字符串创建流,但字符串在空字符后终止..并且数据被复制.

int size;
char *data;
string s = *data;
Run Code Online (Sandbox Code Playgroud)

如何在不复制数据的情况下从char数组指针创建字符串+指定指针数据的大小?除了字符串流,你知道其他任何解决方案吗?

Nas*_*zta 4

写一个自己的basic_streambuf类!更多细节。。(这样你就可以在当前的内存上工作。)

从指针和大小创建字符串:(string str(data,data+size);它将复制数据)。

更重要的是:您应该根据以下内容重写您的函数istream

bool LoadFromStream(istream &is);
Run Code Online (Sandbox Code Playgroud)

这样你就可以执行以下操作,因为两者都基于istringstream和(以后这个函数还可以支持 tcp 流...):ifstreamistream

ifstream file;
istringstream sstream;

LoadFromStream(file);
LoadFromStream(sstream);
Run Code Online (Sandbox Code Playgroud)