StringBuilder クラスが Stream から継承されないのはなぜですか?
-
20-08-2019 - |
質問
これについてはちょっと興味があります。StringBuilder の動作は、機能的には (技術的にはそうではないにしても) Stream と同じであることが印象に残りました。Stream は、他のデータを追加できるデータのビンです。
繰り返しますが、ただの好奇心です。
解決
ストリームバイナリのデータの入力および出力である。
のStringBuilderはのテキストのデータを構築するための手段です。
はそれ以上に、国家の問題があります - StringBuilderのはただ「位置」の無いアイデアを、現在の値を持っています。それはあなたがどこでもそれ内のデータにアクセスし、変異させることができます。ストリームは、他の一方で、あなたが持っている場所を言ってどこか途中でカーソルで、論理的にデータの潜在的に無限の流れです。あなたは、一般的に、単にデータ・ストリームの特定の部分にスキップする/位置をシークして、前方に読み出し/書き込みます。
のStringBuilderとストリームAPIを実装想像してみてください...それだけで収まりません。あなたは、の並べ替えののそれを行うことができますが、基本的には、にStringReaderとにStringWriterで終わると思います。
他のヒント
StringBuilder
だけの機能を追加しより多くを持っています。また、ストリームのために不自然で、インサート機能を持っています。あなたがStringWriter
をラップストリームをしたい場合はStringBuilder
クラスを使用します。
ストリームは、通常、外部入力/出力ソース(ファイル、ネットワーク)を指します。 StringBuilderのは、そのような特性を持っていません。
それは本当にストリームではありませんので。それは成長するバッファの多くはでています。
、全体としての機能が異なっている。
ストリームはない何かを構築するため、いくつかのソースに/からデータを入力または出力するためのものです。 StringBuilderのリソースを構築するなど、バッファリング、のように、ストリームが提供する機能を必要としません。
一方、クラスが見つかります 文字列リーダー/ライター System.IO 内。の 文字列ライター 例えば実装する テキストライター 根底にあるものに対して 文字列ビルダー.
個人的には使用したことがありませんが、テキスト ファイルの書き込みルーチンがある場合は、それを機能させることができます。 テキストライター. 。次に、テストでは、インスタンス化する代わりに、 ストリームライター あなたはインスタンスを作成します 文字列ライター そして、その根底にあるものを見て、何が書かれているかを確認することができます 文字列ビルダー.
今、めまいがしてきました...