C++ 将整个文件读入stringstream

C++ 将整个文件读入stringstream,c++,C++,因此,我想通过某种流解析一个文件,我确实可以简单地使用ifstream类,但问题是我的目标是提高性能,而ifstream类的所有>>操作符都会降低我的程序速度。 所以我想出了一个主意,将整个文件读入std::stringstream,然后用stringstream解析文件。 我想做这样的事情,但我无法让它工作: std::ifstream fin( p_Filename.c_str( ) ); fin.seekg( 0, std::ifstream::end ); int fileSize =

因此,我想通过某种流解析一个文件,我确实可以简单地使用ifstream类,但问题是我的目标是提高性能,而ifstream类的所有>>操作符都会降低我的程序速度。 所以我想出了一个主意,将整个文件读入std::stringstream,然后用stringstream解析文件。 我想做这样的事情,但我无法让它工作:

std::ifstream fin( p_Filename.c_str( ) );
fin.seekg( 0, std::ifstream::end );
int fileSize = static_cast<int>( fin.tellg( ) );
fin.seekg( 0, std::ifstream::beg );

std::stringstream       ss;
ss.str( ).resize( fileSize );
fin.read( const_cast<char*>( ss.str( ).c_str( ) ), fileSize );
std::ifstreamfin(p_Filename.c_str());
fin.seekg(0,标准::ifstream::结束);
int fileSize=static_cast(fin.tellg());
fin.seekg(0,标准::ifstream::beg);
std::stringstream-ss;
str().resize(文件大小);
读取(const_cast(ss.str().c_str()),文件大小);
  • 获取文件的大小,就像您所做的那样
  • 分配一个
    char
    数组来保存内容
  • 使用
    istream::Read
    将整个文件读入
    char
    数组
  • 创建一个使用
    char
    数组的
    istringstream
    。使用它来解析数据
  • 取消分配
    字符的数组
  • 更新


    如果要遵循此策略,请确保以二进制模式打开文件。谢谢@ooga。

    你的结论无效

    如果
    >
    操作符将是一种开销,那么它们在字符串上的操作将具有相同的开销,并且在处理任何文件之前读取整个文件只会增加延迟,即浪费时间和空间


    你不需要这样做。只需确保
    fstream上有足够的缓冲。

    以二进制模式打开文件也可能是一个好主意。我如何在不复制内容的情况下将字符数组分配给istringstream?@grimgrom,为什么需要
    std::istringstream
    ?@ooga:“二进制模式”仅适用于Windows。大多数程序都不需要关心它。@wallyk我很清楚这一点(尽管它肯定不“只适用于Windows”)。但可移植性对大多数人来说都很重要。你真正需要的是
    ss
    ,但问题是我的目标是性能,而ifstream类的所有那些>>操作符都会降低我的程序的速度,你知道这一点,因为你已经编写了你的应用程序并进行了相应的分析,对吗?