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

c++ - basic_streambuf :: pubseekoff()が純粋仮想関数ではないのはなぜですか?

<streambuf>VS2010のヘッダーファイルを見ると、このメンバー関数の定義が次のようになっていることがわかります。

ここseekoffで、は仮想関数です。これは派生クラスでオーバーライドされ、basic_filebuf以下に示すようbasic_stringbufに基本クラスでは何も実行しません。basic_streambuf

の定義が見つかりませんでし_BADOFFたが、おそらく-1です。しかし、それはここでは本当に重要ではありません。クラスは抽象クラスであるため(そのコンストラクターは保護されているため) 、この関数もpubseekoff呼び出されることもありません。basic_streambuf

gccコンパイラが同じ手法を使用していることにも注意してください。なぜ2つのコンパイラは、純粋な仮想として宣言し、派生クラスのそれぞれでそれを定義するのでseekoff()はなく、メンバー関数に頼らなければならなかったのですか?pubseekoffbasic_streambufbasic_filebufbasic_stringbuf

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

c++ - カスタム ストリーム クラスのマニピュレータを作成する

インデントされたテキストを出力し、インデント レベルを変更できるマニピュレータを持つカスタム ストリーム クラスを作成しました。すべてのインデント作業は、ストリーム クラスによって使用されるカスタム ストリーム バッファ クラスに実装されます。バッファは機能しています (つまり、出力でテキストがインデントされています) が、マニピュレータを機能させることができません。私は多くの場所で、(私のクラスが拡張する) ostream が operator<< を次のようにオーバーロードする方法を読んでいました:

つまり、関数をパラメーターとして受け取ることができます。では、なぜ「indent」または「deindent」ストリーム関数が認識されないのでしょうか? operator<< のオーバーロードを行う必要があると確信していますが、その必要はないのではないでしょうか? 私のコードについては以下を参照してください。

ありがとう!

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

c++ - streambuf get streampos

コンパイラ プロジェクトに C++streambufクラスを使用しており、ストリーム内の現在の位置を取得する便利な方法が必要です。

位置を変更するための2 つのメンバー関数streambuf::pubseekposと aがあり、それを読み取るためのメンバー関数 (または同様のもの) がないことにかなり混乱しています。streambuf::pubseekoffstreambuf::pubgetpos

次の 2 つの回避策が考えられます。

  1. 現在の位置を別の変数に保存し、ストリームから文字を読み取るたびに手動で変更できます。

  2. streambuf::pubseekoff(0, ios_base::cur)新しいストリーム位置を返すを呼び出すことができます。

2 番目のオプションは使用できるように見えますが、このような些細な作業には非効率的で見栄えがよくありません。それを行うより良い方法はありますか?

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

file - C ++ pubseekoffを使用してバイナリファイルの現在の位置のオフセットを決定して報告する方法は?

私は C++ を使って約 6 か月しか経っていないので、コードで愚かな間違いを犯したことをお詫びします。

バイナリ ファイルを streambuf に読み込み、streambuf で特定のシーケンスを検索し、バイナリ ファイルのシーケンス開始オフセットと、バイナリ ファイルで特定のシーケンスが見つかった識別子を報告するプロジェクトに取り組んでいます。

検索するシーケンスは、snortRules ベクトルの各インデックスが int のベクトルとして格納される単一のシーケンスである snortRules と呼ばれる vector> に格納されます。

最終的には、一致するはずの別のファイルと比較するために見つかったオフセットと特定のシーケンスを表示するテキスト ファイルを作成する必要がありますが、今のところ、結果をコンソール ウィンドウに出力するだけです。

私のコードは、1 つの問題を除くすべてのシーケンスを見つけたと報告しているため、機能しているようです。何らかの理由で、シーケンスが見つかった場所のオフセットが繰り返されることがあります。たとえば、出力は次のようになります。

私の問題は、streambuf の pubseekoff を使用してオフセットを正しく取得していないことだと思います。

私のコードは次のとおりです。

stackoverflow.com と cplusplus.com で pubseekoff のドキュメントと例を見つけようとしましたが、見つけたものはあまり意味がなく、正直なところ、それが私の問題であると 100% 確信していません...

どんな助けや提案も大歓迎です!

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

boost - boost::asio::streambuf を読み取ると不正なデータが生成される

boost::asio を使用して TCP クライアントを作成しています。Web サイトを読み込んでテストしています。接続の作成、読み取り、コールバックの起動などは問題ありません。ただし、すべてのパケットの最後に、次のようなものがあります。

実際に読み取られたもののサイズをどのように判断できるのか疑問に思っています。以下のコードでは、ソケットが適切にセットアップされていると想定しています。URL (普通の古い Web サイト) に接続し、リクエストを送信して、読み取りを開始しました。データを読み取ると、データが返され、さらに奇妙なことがいくつかあります。

以下は、 http://libcinder.orgから受け取った最初のパケットの結果です。

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

c++ - ブースト iostreaming フィルターが空の値を取得する

boost::iostreams を使用して char* を読み書きするためのストリーム バッファを構築しようとしました。

読み取りは正常に機能します:

しかし、書き込みは機能しません:

何が欠けている?

どうも

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

c++ - std::codecvt::unshift() が必要とする出力の最大サイズは?

私はカスタムファイルに取り組んでいますstreambuf。今、シークのようにフラッシュしたいと思いfstreamます。この時点で、出力用の配列の大きさを知りたいstd::codecvt::unshift()ですか? std::codecvt::max_length()によって返されるサイズで十分であるように私には思えます。私の仮定は正しいですか?

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

c++ - std::filebuf を (アーカイブ) ファイル内のファイルに制限する

std::filebuf現在、圧縮されていない .zip アーカイブからファイルを読み取るカスタムを実装しています。アーカイブ内の各ファイルについて、アーカイブ ファイルへのオフセットとサイズがあります。ここで、filebuf を間隔に制限して、通常のファイルを開いたかの[offset, offset+size]ように関数を使用できるようにします。pubseekoff()たとえばpubseekoff(5, std::ios::beg, std::ios::in);、filebuf を実行する場合、実際には、基になる get-pointer をoffset+5アーカイブ ファイルに設定する必要があります。

これを実装する最良の方法は何ですか?ローカル ファイル オフセット -> アーカイブ ファイル オフセット変換を実行するような関数から派生させstd::filebufてオーバーライドしようとしましseekoff()たが、基になる filebuf (アーカイブ オフセットについて何も知らない) がこれらの関数を呼び出して eof をスローするため、機能しませんでしたエラーなど。また、ストリームバッファ内でaから派生しstd::streambuf使用しようとしましたが、ほとんどのメンバーが保護されているstd::filebufため、これも機能しませんでした。streambuf 内でa を使用std::streambufできますが、それは面倒なようです。std::ifstream

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

c++ - ファイル ストリームの実装定義の同期 - なぜ?

入力ファイル ストリームの同期を実装固有にする理由は何ですか。ストリームが外部デバイスからのコンテンツでバッファを (部分的または完全に) 満たすことは明らかだと思いませんか? 標準 C++ IOStreams と Locales で次のように述べています。

出力ファイルの同期は、 への呼び出しによって実行されるファイルにバッファの内容を書き込むことによって、内部バッファを空にすることとして定義されますoverflow()。入力ファイルの場合、同期の意味は標準では定義されていませんが、IOStreams ライブラリの実装に依存します。

実装を対称にして、入力ファイル ストリームのバッファに を呼び出させるだけで十分ではないでしょうunderflow()か? この決定の理由は何でしたか?