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

时间:2011-09-20 11:09:39

标签: c++ ifstream stringstream

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

bool LoadFromFile(class ifstream &file);

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

bool LoadFromData(class istringstream &file);

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

int size;
char *data;
string s = *data;

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

1 个答案:

答案 0 :(得分:4)

写一个自己的basic_streambuf课程! More details.。 (这样你就可以处理当前的内存。)

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

更重要的是:你应该根据istream

重写你的功能
bool LoadFromStream(istream &is);

通过这种方式,您可以执行以下操作,因为istringstreamifstream基于istream(稍后此函数也可以支持tcp流...):

ifstream file;
istringstream sstream;

LoadFromStream(file);
LoadFromStream(sstream);