ホームページ > バックエンド開発 > C++ > バイナリ ファイルの符号なし文字のベクトルへの読み取りを最適化する方法

バイナリ ファイルの符号なし文字のベクトルへの読み取りを最適化する方法

Linda Hamilton
リリース: 2024-11-02 03:37:02
オリジナル
267 人が閲覧しました

How to Optimize Reading Binary Files into a Vector of Unsigned Chars?

バイナリ ファイル読み取りの最適化

バイナリ ファイルを unsigned char のベクトルに最適に読み取るには、次の戦略を検討してください。

方法 1: カスタム ベクターの構築

<code class="cpp">std::vector<BYTE> readFile(const char* filename)
{
    std::ifstream file(filename, std::ios::binary);
    std::streampos fileSize = file.tellg();
    file.seekg(0, std::ios::beg);
    std::vector<BYTE> fileData(fileSize);
    file.read((char*) &fileData[0], fileSize);
    return fileData;
}</code>
ログイン後にコピー

このメソッドは、ファイル サイズに基づいて正しいサイズのベクターを明示的に作成します。ただし、ベクトルのデータを char* にキャストします。これは望ましくありません。

メソッド 2: Istreambuf Iterator

<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>
ログイン後にコピー

このメソッドは、データを読み取るイテレータを使用します。内部的にはcharバッファ。短いとはいえ、unsigned char を読み取るにもかかわらず、char イテレータが必要です。

メソッド 3: 基本的な Ifstream の特殊化

<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>
ログイン後にコピー

このメソッドは、特殊な入力ファイル ストリームを使用します。符号なし文字の場合。ただし、すべてのケースに適しているわけではありません。

最適化

  • 予約容量: ベクターにメモリを事前に割り当てると、パフォーマンスが向上します。
  • 改行抑制を無効にする: バイナリ モードの ios::skipws はパフォーマンスの問題を引き起こす可能性があります。 unsetf で無効にします。
  • istream_iterator と std::copy: std::copy は、演算子 >> に関連するオーバーヘッドを回避できる可能性があります。

考慮事項

  • シンプルな点で Istreambuf イテレータの方が好ましいかもしれませんが、カスタム イテレータの方がパフォーマンスが向上する可能性があります。
  • 「最良の」方法は、の特定の要件によって異なります。アプリケーションと読み取られるデータ。

以上がバイナリ ファイルの符号なし文字のベクトルへの読み取りを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート