どのような発見制御のレベルの内部バッファリングは、C++fstream?

StackOverflow https://stackoverflow.com/questions/351582

  •  20-08-2019
  •  | 
  •  

質問

うんこ(したり、逆に例):

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
    ifstream ifs(argv[1]);

    char ch;
    while(ifs.read(&ch, 1)) {
        cout << ch;
    }
}

いることを想定していない(希望)のiostream図書館は一部の内部バッファ処理をちこちにいくこgazillionsのバイトのファイルを読み込み操作のOSです。

はしてもらえると助かります。

a) このサイズのifstreamの内部バッファ?

b) 変更のサイズのifstreamの内部バッファ?

書いファイルフィルターズの読みマルチ-ギガバイトのファイルを小さな塊ていただきたいと思いますように実験が異なるバッファのサイズになってしまうためです影響します。

役に立ちましたか?

解決

利用できる ios::rdbuf() 取得ポインタ streambuf オブジェクトです。このオブジェクトが表す内部バッファのストリームです。

話ができ streambuf::pubsetbuf(char * s, streamsize n) をセットに新しい内部バッファの指定されたサイズです。

このリンク できます。

編集: ここではどのようにしているのだ。場合:


#include <iostream>
#include <fstream>
using namespace std;

int main(int argCount, char ** argList[])
{
    ifstream inStream(argList[1]);

    char myBuffer [512];
    inStream.rdbuf()->pubsetbuf(myBuffer, sizeof(myBuffer));

    char ch;
    while(inStream.read(&ch, 1))
    {
        cout << ch;
    }
}

編集: 指摘しているように litb, で、実際の挙動 streambuf::pubsetbuf は実装で定義されています".

んのバッファは、ロール独自のバッファリングクラスを継承 streambuf.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top