問題タブ [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.
c++ - OLE IStream への std::ostream インターフェイス
IStreamを使用する Visual Studio 2008 C++ アプリケーションがあります。で IStream 接続を使用したいと思いますstd::ostream
。このようなもの:
これを実現するために、次のコードを実装しました。
はい、コードはコンパイルされ、機能しているように見えますが、以前に実装する喜びはありませんでしたstd::streambuf
。それで、それが正しくて完全かどうか知りたいだけです。
ありがとう、ポールH
c++ - std ::istreambuf_iterator<>からstd::vector<>にコピーする
ストリームをイテレータのセットとして扱いたいVisualStudio2008C++アプリケーションがあります。
たとえば、ストリームを介してWIN32_FIND_DATA構造体の配列を受信する場合、次のようなことができるようにしたいと思います。
これを実現するために、次から派生したクラスを定義しましたstd::basic_streambuf<>
。
私が理解できないのは、sの配列からbyte
sの配列に優雅に移行する方法WIN32_FIND_DATA
です。std::basic_streambuf<>
テンプレートパラメータが必要なため、またはのような構造体ではなく、またはstd::char_traits<>
のような組み込み型のみを使用できるという印象を受けています。正しい?char
byte
WIN32_FIND_DATA
これを機能させる方法について何か提案はありますか?
ありがとう、PaulH
c++ - 対応するストリームを書き換えずにstreambufから派生
数日前、私は先読みstreambuf
を使用するサブクラスを作成するのが楽しいだろうと決めました。mmap
私のSTL(SGI)がどのように実装され、が含まれているfilebuf
ことに気づいたかを調べました。したがって、から継承することは問題外です。basic_filebuf
FILE*
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
テンプレートパラメーターを追加できません。fstream
fstream
=>filebuf
追加の属性のない純粋な仮想クラスである必要があります。そのため、すべてのFILE*ガベージを実行せずに継承できます。
このテーマに関するあなたの考えは?
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() を呼び出す必要があるなどとは思いもしませんでした。)
助けてくれてありがとう。私はこのサイトに非常に感銘を受けました.---参加者の知識と、誰が最良の答えを持っているかを認める友好的で正直な性格の両方に. :)
c++ - boost::asio::async_read を実行した後に streambuf を操作しても安全ですか?
ブースト メーリング リストで asio の作成者が述べたように async_write が機能しているときに、streambuf を操作するのは安全ではないことを私は知っています。私が知りたいのは、async_read の後に streambuf を操作しても安全ですか?
例:
c++ - streambufのオーバーフロー機能に関する問い合わせ
オーバーフロー関数のドキュメントに目を通してください。オーバーフローの戻り値は次のとおりです。
戻り値:
EOF (または他の特性の traits::eof()) とは異なる値は、成功を示します。
関数が失敗した場合、EOF (または他の特性の traits::eof()) が返されるか、例外がスローされます。
出典 :" http://www.cplusplus.com/reference/iostream/streambuf/overflow/ "
オーバーフロー関数が例外を通過するシナリオを教えてください。どんな助けでも大歓迎です
c++ - boost::asio::async_read および boost::asio::streambuf
streambuf で async_read を使用しています。ただし、本文に行く前にヘッダーを適切に処理できるように、読み取るデータの量を 4 に制限したいと思います。
async_read を使用してそれを行うにはどうすればよいですか?
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
バイト サイズのようです。より大きなサイズが必要です。
c++ - メモリマップされたフォーマットされたファイルから整数を読み取る
次のように、1行に1つの整数を含む大きなフォーマット(テキスト)ファイルをメモリマップしました。
したがって、最初のバイトにメモリへのポインタがあり、最後のバイトにメモリへのポインタもあります。私はこれらすべての整数をできるだけ速く配列に読み込もうとしています。最初に、std::istreamを操作してそのメモリから読み取るための特殊なstd::streambufクラスを作成しましたが、比較的遅いようです。
「1231232\r \ n123123 \ r \ n123 \ r \ n1231 \ r \n2387897...」のような文字列を配列{1231232,123123,1231,231,2387897,. ..}?
ファイル内の整数の数は事前にはわかりません。
c++ - wistreamを使用してファイルから読み取るのと同じように、メモリから読み取るにはどうすればよいですか?
前の質問で、ファイルからと同じようにメモリから読み取る方法を尋ねました。ファイル全体がメモリ内にあったので、同じように読みたかったのです。
私は自分の質問に対する答えを見つけましたが、実際には行をとして読む必要がありますwstring
。ファイルで私はこれを行うことができます:
ファイルがASCIIであっても。
今、私は単にこの答えからの関数で私のstring
行を変更しています。ただし、このメモリのチャンクをaと同じように扱う方法があれば、この行をsとして取得する方が高速な解決策になると思います。そして、私はこれが速い必要があります。wstring
wistream
wstring
だから誰もがこのメモリのチャンクを?として扱う方法を知っていwistream
ますか?