問題タブ [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++ - 標準ストリーム用アダプター
私のプロジェクトには抽象クラスがあり、その派生物はさまざまな場所への入出力に使用されます。仮想メソッドreadおよびwriteがあります。
入力/出力をこれらのメソッドにリダイレクトするには、std ストリーム (std::istream および std::ostream) とこのクラスの間に一種のアダプターが必要です。
たとえば、
が呼び出されると、writeメソッドが呼び出されます。
std::istreamとstd::ostreamまたはstd::streambufをオーバーロードする必要があると思いますが、どのメソッドかわかりません。
これを実装するより良い方法は何ですか?
c++ - std::streambuf::in_aval は std::ostream に対して常に 0 を返します
私の目標は、データを に保存することstreambuf
です。私の考えは、を使用してデータを取得streambuf
し、取得することです。rdbuf
sgetn
10 を取得する予定でしたが、in_avail
メソッドから 0 が返されました。
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'
か? 多くのコピーを行わなくても可能ですか?
c++ - C++ STL streambuf 例外処理
ここに、このstreambuf
構造ostream
があります (ここから変更http://wordaligned.org/articles/cpp-streambufs )。ここthrow
で、コードの 2 つのポイントから試みます。しかし、これらの例外をキャッチすることはできmain()
ず、プログラムは正常に終了します。これの理由は何ですか?
c++ - ブースト serial_port からの読み取りは、数回の読み取りごとに誤ったデータを読み取ります
の形式のストリーム バッファに文字列を配置しています"000.3\r\n 000.3\r\n ..."
。数回の読み取りごとに".3\r\n 000.3\r\n ...
、フレームごとに 1 回だけバッファから読み取っているだけなので、画面に描画するときに急激な値のジャンプが顕著になります。バッファの読み取り準備ができているかどうかをテストするにはどうすればよいですか? 小数点の後に 000 があるかどうかを確認してください。または、正しいデータを確認するためのより良い方法はありますか?
ポートの初期化:
ポートからの読み取り:
c++ - C++ ostream のストリーム バッファをカスタマイズする
出力ストリーム用に独自のストリームバッファを実装しています。基本的に、これはベクトルのようなストリーム バッファであり、オーバーフロー関数が毎回単純にバッファを 2 倍の大きさに再割り当てします。sync 関数は、ファイル記述子で指定されたデバイスにすべてのデータを書き出しますfd
。
cout
ただし、を自分のバッファーに置き換えると、segfault が発生します。GDBと格闘した後、エラーがどこにあるのかわかりませんでした。
この実装に問題はありますか? 多くの記事が通常オーバーライドsync
されておりoverflow
、必須であるのを見てきました。
c++ - ストリームバッファ間のデータのブロックレベルのコピー
インスタンス間でデータを効率的にコピーしたいと考えています。std::streambuf
つまり、文字ごとのコピーを実行するのではなく、それらの間でデータのブロックをシャベルで処理したいと考えています。たとえば、これは私が探しているものではありません。
これには構文糖衣があり、もう少しエラーチェックが行われます:
operator<<(basic_streambuf<..>*)
これは、私の標準ライブラリ (Mac OS X、XCode 7)での実装のスニペットです。
要するに、これはまだ文字ごとのコピーです。標準ライブラリが、文字ごとのトランスポートとは対照的に、sputn
ストリームバッファのブロック レベルのメンバー関数に依存するアルゴリズムを使用することを期待していました。sgetn
標準ライブラリはそのようなアルゴリズムを提供していますか、それとも自分で作成する必要がありますか?