問題タブ [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 投票する
3 に答える
712 参照

c++ - 標準ストリーム用アダプター

私のプロジェクトには抽象クラスがあり、その派生物はさまざまな場所への入出力に使用されます。仮想メソッドreadおよびwriteがあります。

入力/出力をこれらのメソッドにリダイレクトするには、std ストリーム (std::istream および std::ostream) とこのクラスの間に一種のアダプターが必要です。

たとえば、

が呼び出されると、writeメソッドが呼び出されます。

std::istreamstd::ostreamまたはstd::streambufをオーバーロードする必要があると思いますが、どのメソッドかわかりません。

これを実装するより良い方法は何ですか?

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

c++ - std::streambuf::in_aval は std::ostream に対して常に 0 を返します

私の目標は、データを に保存することstreambufです。私の考えは、を使用してデータを取得streambufし、取得することです。rdbufsgetn

10 を取得する予定でしたが、in_availメソッドから 0 が返されました。

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

c++ - asio::async_read_until: 複数行を処理する堅牢で優雅な方法

サーバーから文字データをフェッチする TCP クライアントをサポートするために区切り文字を使用asio::async_read_untilしています。'\n'このサーバー'\n'は、終了した回線を継続的に送信します。正確には、単一行または複数行の連結文字列を一度に書き込むことができます。

ドキュメントから、私はそれasio::async_read_untilが読むことができることを理解しています:

  • のような1'\n'行で終了します"some_data\n"std::getlineこれは最も単純なケースで、関連付けられたストリームでの呼び出しで処理されます。asio::streambuf
  • のように、 1 つの'\n'終了行と次の行の先頭"some_data1\nbla"std::getlineこれは;で処理できます。2 行目の残りの部分は、次の完了ハンドラ呼び出しで処理されます。
  • 多くの行; この場合、新しく読み取られたデータには 2 つ以上の'\n'. 不完全な回線 (最終的には将来のパケットで受信することになります) でstd::getline呼び出す危険を冒したくないことを知っている場合、何回の呼び出しを行う必要があるかをどのように知ることができますか? std::getline複数の存在を確認するためにストリーム バッファを覗く必要があります'\n'か? 多くのコピーを行わなくても可能ですか?
0 投票する
1 に答える
446 参照

c++ - C++ STL streambuf 例外処理

ここに、このstreambuf構造ostreamがあります (ここから変更http://wordaligned.org/articles/cpp-streambufs )。ここthrowで、コードの 2 つのポイントから試みます。しかし、これらの例外をキャッチすることはできmain()ず、プログラムは正常に終了します。これの理由は何ですか?

0 投票する
0 に答える
137 参照

c++ - ブースト serial_port からの読み取りは、数回の読み取りごとに誤ったデータを読み取ります

の形式のストリーム バッファに文字列を配置しています"000.3\r\n 000.3\r\n ..."。数回の読み取りごとに".3\r\n 000.3\r\n ...、フレームごとに 1 回だけバッファから読み取っているだけなので、画面に描画するときに急激な値のジャンプが顕著になります。バッファの読み取り準備ができているかどうかをテストするにはどうすればよいですか? 小数点の後に 000 があるかどうかを確認してください。または、正しいデータを確認するためのより良い方法はありますか?

ポートの初期化:

ポートからの読み取り:

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

c++ - C++ ostream のストリーム バッファをカスタマイズする

出力ストリーム用に独自のストリームバッファを実装しています。基本的に、これはベクトルのようなストリーム バッファであり、オーバーフロー関数が毎回単純にバッファを 2 倍の大きさに再割り当てします。sync 関数は、ファイル記述子で指定されたデバイスにすべてのデータを書き出しますfd

coutただし、を自分のバッファーに置き換えると、segfault が発生します。GDBと格闘した後、エラーがどこにあるのかわかりませんでした。

この実装に問題はありますか? 多くの記事が通常オーバーライドsyncされておりoverflow、必須であるのを見てきました。

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

c++ - ストリームバッファ間のデータのブロックレベルのコピー

インスタンス間でデータを効率的にコピーしたいと考えています。std::streambufつまり、文字ごとのコピーを実行するのではなく、それらの間でデータのブロックをシャベルで処理したいと考えています。たとえば、これは私が探しているものではありません。

これには構文糖衣があり、もう少しエラーチェックが行われます:

operator<<(basic_streambuf<..>*)これは、私の標準ライブラリ (Mac OS X、XCode 7)での実装のスニペットです。

要するに、これはまだ文字ごとのコピーです。標準ライブラリが、文字ごとのトランスポートとは対照的に、sputnストリームバッファのブロック レベルのメンバー関数に依存するアルゴリズムを使用することを期待していました。sgetn標準ライブラリはそのようなアルゴリズムを提供していますか、それとも自分で作成する必要がありますか?