バイナリ ファイルを符号なし文字のベクトルに効率的に読み取るにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-30 08:00:03
オリジナル
456 人が閲覧しました

How to Read Binary Files into a Vector of Unsigned Chars Efficiently?

符号なし文字のベクトルへのバイナリ ファイルの効率的な読み取り

バイナリ ファイルの読み取りメソッド

バイナリ ファイルを符号なし文字のベクトル (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) への変換が含まれます。ただし、この変換プロセスにより、パフォーマンス上の問題が発生する可能性があります。

パフォーマンスの最適化:

パフォーマンスを最適化するには、次の点を考慮してください。

  • std::basic_ifstream の使用直接型を処理するため。
  • 複数回のサイズ変更を避けるために、読み取り前にベクターの容量を予約します。
  • 特殊なイテレータを備えた std::copy を採用して、ファイルからベクターにデータを効率的に転送します。
  • ファイルのバイナリ モードが有効であることを確認します (std::ios::binary) および改行スキップが無効であることを確認します (std::noskipws)。これらの設定は影響を与える可能性があります。バイナリデータの読み取り。

以上がバイナリ ファイルを符号なし文字のベクトルに効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!