私はiostreamを読んで理解しています。ときどき私は、挿入子(<<
)と抽出子(>>
)は、テキストののシリアル化で使用することを意図していることが時々分かります。それはいくつかの場所ですが、この記事では良い例です:<iostream>
宇宙、< <とは>>まだやるストリームのような方法に使用されている場合があるのバイナリデータとテキストを読み書きするインサータとエクストラクタ
http://spec.winprog.org/streams/
外いかなる原文の慣習にも従わない。 QtのQDataStream
で使用された場合例えば、彼らは、バイナリエンコードされたデータを書き込む:言語レベルでhttp://doc.qt.nokia.com/latest/qdatastream.html#details
は、< <と>>演算子はオーバーロードするようにプロジェクトに所属する(QDataStreamがないので、何が明らかに許容可能です) 。私の質問は、<iostream>
を使用している人にとって、< <と>>演算子を使用してバイナリのエンコーディングとデコードを実装することは悪い習慣とみなされます。ディスク上のファイルに書き込まれて、ファイルをテキストエディタで表示および編集可能にする必要があるという期待がありますか?
常に他のメソッド名を使用し、それらをread()
とwrite()
に基づいていなければなりませんか?あるいは、テキスト形式のエンコーディングは、標準ライブラリiostreamと統合するクラスが無視することができるデフォルトの動作としか考えられないでしょうか?
UPDATEは、この上の重要な用語の問題は(「バイナリ」VS用語「原文」とは反対に)「未フォーマット」対「書式設定」されたI/Oの区別のようです。
writing binary data (std::string) to an std::ofstream?
それはフォーマットされた出力 『「私の脳のようにそれを読み込むように私は、とにかくバイナリデータの< <を使用したくないだろう』 を言っ@ TomalakGeret'kalからのコメントがあります。私はこの質問を見つけましたあなたがやっていることではありません。もう一度、それは完全に有効ですが、私はちょうどそのように私の脳を混乱させませんでした。
ios::binary
を使用している限り問題は認められています。それは議論の「それに何も悪いことはありません」と強調しているようですが、私はまだこの問題に関する権威のある情報源は見ません。
"テキストエンコーディング"は誤解を招く用語です。 「フォーマットされたI/O」はより適切です。 –
あなたのフレームワークは何でもします。 –
@KerrekSB "フォーマットされたI/O"が排除するものよりも、 "テキストエンコーディング"が何を排除しているのかがはっきりしています。 N個の32ビット整数を持つオブジェクトを持っている場合、 'write()'を使ってNの4バイトを出力し、その値に対応する4 * Nバイトを出力します...それでもまだフォーマットされていますか? – HostileFork