相关疑难解决方法(0)

从char获取一个istream*

我有一个char*和我从库中收到的数据长度,我需要将数据传递给一个带有istream的函数.

我知道我可以创建一个字符串流但是会复制所有数据.而且,数据肯定会有0,因为它是一个zip文件,创建一个字符串流将把数据带到我认为的第一个0.

有没有办法从char*创建一个istream,它的大小没有复制所有数据?

c++ istream

51
推荐指数
5
解决办法
4万
查看次数

如何将文件内容读入istringstream?

为了提高从文件读取的性能,我试图将大(几MB)文件的整个内容读入内存,然后使用istringstream来访问信息.

我的问题是,哪个是读取此信息并将其"导入"到字符串流中的最佳方法?这种方法的一个问题(参见下文)是在创建字符串流时,缓冲区被复制,内存使用量增加一倍.

#include <fstream>
#include <sstream>

using namespace std;

int main() {
  ifstream is;
  is.open (sFilename.c_str(), ios::binary );

  // get length of file:
  is.seekg (0, std::ios::end);
  long length = is.tellg();
  is.seekg (0, std::ios::beg);

  // allocate memory:
  char *buffer = new char [length];

  // read data as a block:
  is.read (buffer,length);

  // create string stream of memory contents
  // NOTE: this ends up copying the buffer!!!
  istringstream iss( string( buffer ) );

  // delete temporary buffer
  delete [] buffer;

  // close …
Run Code Online (Sandbox Code Playgroud)

c++ memory optimization stream stringstream

37
推荐指数
2
解决办法
9万
查看次数

从(char*,size_t)创建C++内存流的简单方法,而不复制数据?

我找不到任何现成的东西,所以我想出了:

class membuf : public basic_streambuf<char>
{
public:
  membuf(char* p, size_t n) {
    setg(p, p, p + n);
    setp(p, p + n);
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:

char *mybuffer;
size_t length;
// ... allocate "mybuffer", put data into it, set "length"

membuf mb(mybuffer, length);
istream reader(&mb);
// use "reader"
Run Code Online (Sandbox Code Playgroud)

我知道stringstream,但它似乎无法使用给定长度的二进制数据.

我在这里发明了自己的轮子吗?

编辑

  • 它不能复制输入数据,只需创建迭代数据的东西.
  • 它必须是便携式的 - 至少它应该在gcc和MSVC下工作.

c++ memorystream

29
推荐指数
2
解决办法
5万
查看次数

我如何从内存中读取,就像使用iostream的文件一样?

我有简单的文本文件加载到内存中.我想从内存中读取,就像我从像这里的光盘中读到的那样:

ifstream file;
string line;

file.open("C:\\file.txt");
if(file.is_open())
{
    while(file.good())
    {
        getline(file,line);         
    }
}   
file.close();
Run Code Online (Sandbox Code Playgroud)

但我有记忆中的档案.我在内存中有一个地址和这个文件的大小.

我必须做些什么才能获得与上述代码中处理文件相同的流畅度?

c++ memory iostream

7
推荐指数
4
解决办法
7768
查看次数