問題タブ [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++ - C++ 装飾 basic_stream::underflow()
デコレータ パターンを使用して、basic_streambuf オブジェクトの動作を拡張したいと考えています。それが私が現在得ているものです:
基本的な目標 (最初のステップとして) は、各機能を装飾されたオブジェクトに単純に転送することです。したがって、このデコレータは、その基本クラスへのポインタでも使用できるはずです。
メソッドの記述にはこれで問題ありませんが、uflow() と sgetc() から呼び出される underflow() 関数の処理方法がわかりません。
c++ - istream::tellg() は、カスタム streambuf クラスで使用すると -1 を返しますか?
istream
生メモリ バッファから直接読み取るを作成しようとしています。
ここの別の投稿でこれを行う良い方法を見つけました:
次に、istream
これを使用して作成しますmembuf
:
getline()
次に、 and>>
演算子の使用を読みましたが、すべてが素晴らしいものでした。seekg()
ただし、バッファの先頭に巻き戻すために使用できないようで、istream::tellg()
常に を返します-1
。
これらを機能させるには、さらにコードを書く必要がありますか、それとも失敗する運命にありますか?
c++ - basic_streambuf :: seekoff ios_base ::in|のときに返される内容 ios_base :: outが指定されていますか?
27.6.3.4.2バッファの管理と配置
basic_streambuf
効果:この節(27.8.2.4、27.9.1.5)で派生したクラスごとに個別に定義された方法で、1つ以上の制御されたシーケンス内のストリーム位置を変更します。- デフォルトの動作:を返します
pos_type(off_type(-1))
。
ここまでは順調ですね。basic_streambuf
私が使用している派生は、および/またはの位置を個別に変更できios_base::in
ますios_base::out
。しかし、両方が指定されている場合、何を返す必要がありますか?
ios_base::in
または を指定するios_base::out
と、特定のシーケンスの新しいストリーム位置が返されます。
c++ - データをstd::streambufにシリアル化する
Visual Studio 2008 C ++プロジェクトがあり、複数のクラスからカスタムstd::streambuf
実装にデータをシリアル化しようとしています。
シリアル化されたデータクラス:
ストリームバッファの実装は、バッファリングされたi/oとオーバーライドunderflow
およびを提供しますoverflow
。
私の使用目的は次のようなものです。
しかし、MyStreambuf::overflow
呼び出されることはありません。データをバッファに取り込むために何をする必要がありますか?
ありがとう、PaulH
c++ - Windows での streambuf による c++ IPC
バイナリ データ ストリーム (任意の std::streambuf を使用できます) としてシリアル化されたメッセージ オブジェクトがあり、それを別のプロセスに転送したいと考えています。重要なのは、サーバー アプリケーションは多くのクライアントを処理する必要があり、接続は非同期である必要があり (複数のクライアントがあるため)、双方向である必要があります (内部では、2 つの別個の接続によって実装される場合があります)。メッセージは可変長であり、キューに入れる必要があります。これにはどの IPC 方法を選択すればよいですか? アプリケーションを介してストリーム バッファを転送する簡単な方法はありますか? 速度は重要ではありませんが、長時間アプリケーションをブロックしないことをお勧めします。Windows (私は XP 以降を目指しています) では、すべてローカルで実行されます。ネットワーク サポートは必要ありません。
また、着信接続をリッスンする可能性も必要です。サーバーは新しい接続を自動的に検出し、互換性がある場合はハンドシェイクを行って受け入れます。私は自分で言及したことの多くを書く必要があることを認識しています. とにかく、それは達成可能でなければなりませんが、もちろん簡単な方が良いです。
c++ - basic_streambuf::setbuf で設定するバッファはどれですか?
basic_streambuf
Winsock ソケットとの間で読み書きを処理する作業を行っています。のようbasic_filebuf
に、オブジェクトを内部的に使用してstd::codecvt
、基になるソケットから読み取ったバイトを「ソケット streambuf」の char 型に変換し、ソケット streambuf に書き込まれた文字を基になるソケットに書き込むことができるバイトに変換します。これを行うには、streambuf の読み取り機能と書き込み機能の両方のバッファーを維持する必要があることがわかりました。
私が遭遇している論理的な問題は、streambuf の実装が読み取りと書き込みの両方に使用されることを意図している (std::iostream
コンストラクターは streambuf への単一のポインターを取る) ことですが、設定するためにカスタマイズできるオーバーライド可能なメンバー関数は 1 つしかありません。基になる文字バッファー: setbuf
. ソケット streambuf テンプレートのユーザーが基になるバッファーを設定できるようにしたい場合setbuf
、読み取りバッファーまたは書き込みバッファーを設定する必要がありますか? どちらのオプションがより理にかなっていますか?
c++ - Boost ASIO streambuf から読み取るには?
バイトを削除せずにストリームバッファから読み取る方法はありますか?
メッセージ全体が受信されたかどうかを確認するために、バッファから「メッセージ サイズ」フィールドを読み取っています。
そうでない場合は、それを取得するために別の非同期読み取りを投稿していますが、サイズ フィールドが削除されたため、ハンドラーはメッセージの長さを知る方法がありません。
どんな助けでも大歓迎です!
例えば
c++ - ブースト asio streambuf は、消費を呼び出した後にメモリを解放しませんか?
メソッドが呼び出されたとき、consume
占有されていたメモリstreambuf b
は解放されません。async_read_until
何度も呼び出されるとメモリが増えていきます。私の使い方は正しいですか?the get pointer
streambufの前にメモリを解放する方法はありますか?
c++ - C ++ストリームの混乱:istreambuf_iteratorとistream_iterator?
istreambuf_iterator
との違いは何istream_iterator
ですか?そして、一般的に、ストリームとストリームバフの違いは何ですか?これについての明確な説明が本当に見つからないので、ここで尋ねることにしました。
c++ - ブースト asio 読み取りおよび書き込み用のバッファーとして streambuf を使用する
私はこのコードを読んでいます
これは書き込み用です
ここで、socket_ はソケット、max_length は値 1024 の列挙型、data_ は長さが max_length の char 配列です。
しかし、char配列バッファをstreambufに置き換えたいです。私はもう試した
しかし、機能していません。どうすればできますか?