C++ 将整个文件读入stringstream
因此,我想通过某种流解析一个文件,我确实可以简单地使用ifstream类,但问题是我的目标是提高性能,而ifstream类的所有>>操作符都会降低我的程序速度。 所以我想出了一个主意,将整个文件读入std::stringstream,然后用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 =
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类的所有那些>>操作符都会降低我的程序的速度,你知道这一点,因为你已经编写了你的应用程序并进行了相应的分析,对吗?