符号なし文字のベクトルへのバイナリ ファイルの効率的な読み取り
バイナリ ファイルの読み取りメソッド
バイナリ ファイルを符号なし文字のベクトル (std::vector
方法 1:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); std::streampos fileSize = file.tellg(); std::vector<BYTE> fileData(fileSize); file.read((char*) &fileData[0], fileSize); return fileData; }</code>
このメソッドはファイルを開き、file.seekg/file.tellg を使用してそのサイズを決定します。次に、適切なサイズのベクトルを割り当て、データを読み取ります。ただし、char* への明示的なキャストが必要であり、不便な場合があります。
メソッド 2:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); return std::vector<BYTE>((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); }</code>
このメソッドは std::istreambuf_iterator を利用して反復処理します。ファイルの文字を取得してベクトルを構築しますが、ベクトルに unsigned char が格納されている場合でも、char へのキャストが必要です。
方法 3:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::basic_ifstream<BYTE> file(filename, std::ios::binary); return std::vector<BYTE>((std::istreambuf_iterator<BYTE>(file)), std::istreambuf_iterator<BYTE>()); }</code>
このメソッドは直接使用します。キャストの必要性を回避する、必要な型 BYTE の std::basic_ifstream。
舞台裏の操作:
std::istreambuf_iterator を使用する場合、基本的な操作には、ファイルの内部バッファからの読み取りと、char データの目的の型 (この場合は BYTE) への変換が含まれます。ただし、この変換プロセスにより、パフォーマンス上の問題が発生する可能性があります。
パフォーマンスの最適化:
パフォーマンスを最適化するには、次の点を考慮してください。
以上がバイナリ ファイルを符号なし文字のベクトルに効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。