問題タブ [streambuf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1106 参照

c++ - OLE IStream への std::ostream インターフェイス

IStreamを使用する Visual Studio 2008 C++ アプリケーションがあります。で IStream 接続を使用したいと思いますstd::ostream。このようなもの:

これを実現するために、次のコードを実装しました。

はい、コードはコンパイルされ、機能しているように見えますが、以前に実装する喜びはありませんでしたstd::streambuf。それで、それが正しくて完全かどうか知りたいだけです。

ありがとう、ポールH

0 投票する
1 に答える
1537 参照

c++ - std ::istreambuf_iterator<>からstd::vector<>にコピーする

ストリームをイテレータのセットとして扱いたいVisualStudio2008C++アプリケーションがあります。

たとえば、ストリームを介してWIN32_FIND_DATA構造体の配列を受信する場合、次のようなことができるようにしたいと思います。

これを実現するために、次から派生したクラスを定義しましたstd::basic_streambuf<>

私が理解できないのは、sの配列からbytesの配列に優雅に移行する方法WIN32_FIND_DATAです。std::basic_streambuf<>テンプレートパラメータが必要なため、またはのような構造体ではなく、またはstd::char_traits<>のような組み込み型のみを使用できるという印象を受けています。正しい?charbyteWIN32_FIND_DATA

これを機能させる方法について何か提案はありますか?

ありがとう、PaulH

0 投票する
4 に答える
2943 参照

c++ - 対応するストリームを書き換えずにstreambufから派生

数日前、私は先読みstreambufを使用するサブクラスを作成するのが楽しいだろうと決めました。mmap私のSTL(SGI)がどのように実装され、が含まれているfilebufことに気づいたかを調べました。したがって、から継承することは問題外です。basic_filebufFILE*basic_filebuf

だから私はから継承しましたbasic_streambuf。それから私は自分mmapbufをfstreamにバインドしたかった。

私がしなければならない唯一のことはfilebuf...の暗黙のインターフェースをコピーすることだと思いましたが、それは明らかな間違いでした。SGIでは、basic_fstreamを所有していbasic_filebufます。を呼び出しbasic_filestream.std::::ios::rdbuf( streambuf* )ても、ファイルストリームはそれを完全に無視し、独自のを使用しfilebufます。

だから今、私は少し混乱しています...確かに、私は自分自身を作成することができます、mmfstreamそれは正確なコピー/貼り付けになりますfstreamが、それは実際にはDRY指向ではないように聞こえます。

私が理解できないのは、なぜfstreamこれほど緊密に結合されているので、 ?filebuf以外のものを使用できないのかということです。filebufストリームとbufsを分離することの全体的なポイントは、異なるバッファーを持つストリームを使用できることです。

ソリューション:

=>filestreamの暗黙のインターフェースに依存する必要がありますfilebuf。つまり、fstreamはstreambufクラスによってテンプレート化する必要があります。これにより、の暗黙的なインターフェイスfstreamを実装している限り、誰もが独自のstreambufサブクラスをに提供できるようになります。問題:テンプレートテンプレートパラメーターとして使用しているときにテンプレートセレクターが破損するため、にfilebufテンプレートパラメーターを追加できません。fstreamfstream

=>filebuf追加の属性のない純粋な仮想クラスである必要があります。そのため、すべてのFILE*ガベージを実行せずに継承できます。

このテーマに関するあなたの考えは?

0 投票する
1 に答える
2491 参照

c++ - カスタム istream/streambuf に seekg() を実装するにはどうすればよいですか?

私は 10 年前は C++ の専門家でしたが、ここ 10 年間は Java をプログラミングしてきました。小さなサードパーティの XML パーサーを使用する C++ プロジェクトを開始しました。XML パーサーは、STL istream を受け入れます。私の XML データは Windows COM IStream から来ています。私は、Right Thing を実行して、IStream データを取得し、istream を介して XML パーサーに提示するアダプターを作成すると考えました。

http://www.mr-edd.co.uk/blog/beginners_guide_streambufの優れたチュートリアルに従い、基になる COM IStream からデータを取得する COMStreambuf を作成し、それをカスタム COMIstream のバッファーとして使用しました。すべて問題ないように見えますが、パーサーから読み取りエラーが発生します。

パーサーは、istream で seekg() を使用してファイル全体をメモリに読み込み、そのサイズを調べてから、seekg() で最初に戻って一度に読み込みます。当然のことながら、前述のチュートリアルでは、明らかに書かれたことのない「[シークの実装に関する指示] を別の投稿のために保存する」ことにしました。

カスタム istream/streambuf で seekg() を実装するために何をする必要があるか教えてもらえますか? 私は自分でそれをやってみようと思います (私の最初の傾向は、istream で何かをオーバーライドすることです) が、STL の深部での経験が浅く、Java のメンタリティがあるため、何か不完全なことをして脆弱な解決策になるのではないかと心配しています。(たとえば、チュートリアルを読まなければ、たとえば、新しい streambuf を記述してカスタム istream を作成したり、デフォルトのロケールで imbue() を呼び出す必要があるなどとは思いもしませんでした。)

助けてくれてありがとう。私はこのサイトに非常に感銘を受けました.---参加者の知識と、誰が最良の答えを持っているかを認める友好的で正直な性格の両方に. :)

0 投票する
1 に答える
522 参照

c++ - boost::asio::async_read を実行した後に streambuf を操作しても安全ですか?

ブースト メーリング リストで asio の作成者が述べたように async_write が機能しているときに、streambuf を操作するのは安全ではないことを私は知っています。私が知りたいのは、async_read の後に streambuf を操作しても安全ですか?

例:

0 投票する
3 に答える
320 参照

c++ - streambufのオーバーフロー機能に関する問い合わせ

オーバーフロー関数のドキュメントに目を通してください。オーバーフローの戻り値は次のとおりです。

戻り値:

EOF (または他の特性の traits::eof()) とは異なる値は、成功を示します。

関数が失敗した場合、EOF (または他の特性の traits::eof()) が返されるか、例外がスローされます。

出典 :" http://www.cplusplus.com/reference/iostream/streambuf/overflow/ "

オーバーフロー関数が例外を通過するシナリオを教えてください。どんな助けでも大歓迎です

0 投票する
3 に答える
2160 参照

c++ - boost::asio::async_read および boost::asio::streambuf

streambuf で async_read を使用しています。ただし、本文に行く前にヘッダーを適切に処理できるように、読み取るデータの量を 4 に制限したいと思います。

async_read を使用してそれを行うにはどうすればよいですか?

0 投票する
1 に答える
3401 参照

c++ - boost.asio - 読み取りストリームの最大サイズを設定する

http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/http/client/async_client.cppに HTTP クライアントの例があります。次のコードで説明されているように、最大​​バッファ サイズ を変更するのを手伝ってください(サイトからではなく、ライブラリでダウンロードされた例からのものです):

そして、応答バッファーのコンストラクターは次のとおりです。

しかし、コンパイラは次のコードが無効であると言います:

boost::asio::streambuf response_(1024);

デフォルトのバッファは512バイト サイズのようです。より大きなサイズが必要です。

0 投票する
4 に答える
1444 参照

c++ - メモリマップされたフォーマットされたファイルから整数を読み取る

次のように、1行に1つの整数を含む大きなフォーマット(テキスト)ファイルをメモリマップしました。

したがって、最初のバイトにメモリへのポインタがあり、最後のバイトにメモリへのポインタもあります。私はこれらすべての整数をできるだけ速く配列に読み込もうとしています。最初に、std::istreamを操作してそのメモリから読み取るための特殊なstd::streambufクラスを作成しましたが、比較的遅いようです。

「1231232\r \ n123123 \ r \ n123 \ r \ n1231 \ r \n2387897...」のような文字列を配列{1231232,123123,1231,231,2387897,. ..}?

ファイル内の整数の数は事前にはわかりません。

0 投票する
3 に答える
1306 参照

c++ - wistreamを使用してファイルから読み取るのと同じように、メモリから読み取るにはどうすればよいですか?

前の質問で、ファイルからと同じようにメモリから読み取る方法を尋ねました。ファイル全体がメモリ内にあったので、同じように読みたかったのです。

私は自分の質問に対する答えを見つけましたが、実際には行をとして読む必要がありますwstring。ファイルで私はこれを行うことができます:

ファイルがASCIIであっても。

今、私は単にこの答えからの関数で私のstring行を変更しています。ただし、このメモリのチャンクをaと同じように扱う方法があれば、この行をsとして取得する方が高速な解決策になると思います。そして、私はこれが速い必要があります。wstringwistreamwstring

だから誰もがこのメモリのチャンクを?として扱う方法を知っていwistreamますか?