質問:
ドットネットのFileStreamとStreamWriterの違いは何ですか?
どのコンテキストを使用することになっていますか?彼らの長所と短所は何ですか?
これら2つを1つに結合することは可能ですか?
ドットネットのFileStreamとStreamWriterの違いは何ですか?
FileStream
はStream
です。すべてのストリームと同様に、_byte[]
_データのみを処理します。
_StreamWriter : TextWriter
_は、ストリームデコレータです。 TextWriterは、文字列や文字などのテキストデータを_byte[]
_にエンコードし、リンクされたStream
に書き込みます。
どのコンテキストを使用することになっていますか?彼らの長所と短所は何ですか?
_byte[]
_データがある場合は、裸のFileStreamを使用します。テキストを書きたいときにStreamWriter
を追加します。フォーマッタまたはシリアライザを使用して、より複雑なデータを書き込みます。
これら2つを1つに結合することは可能ですか?
はい。 StreamWriterを作成するには、常にStreamが必要です。ヘルパーメソッドSystem.IO.File.CreateText("path")
はそれらを組み合わせて作成し、外側のライターをDispose()するだけです。
FileStreamはバイトを書き込み、StreamWriterはテキストを書き込みます。それで全部です。
FileStreamは、作業ファイルを明示的に対象としています。
StreamWriterを使用して、あらゆる種類の Stream -ネットワークソケット、ファイルなどにストリーミングできます。
ScottGuはここでさまざまなStreamオブジェクトを非常にうまく説明しています。 http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c422
さて、MSDNから FileStream
:
ファイルの周りにストリームを公開し、同期および非同期の読み取りおよび書き込み操作をサポートします。
および StreamWriter
のMSDN:
特定のエンコーディングでストリームに文字を書き込むためのTextWriterを実装します。
最も明らかな違いは、FileStream
は読み取り/書き込み操作を許可するのに対し、StreamWriter
は書き込み専用であるということです。
StreamWriter
ページはさらに追加します:
StreamWriterは特定のエンコーディングでの文字出力用に設計されていますが、Streamから派生したクラスはバイト入出力用に設計されています。
2番目の違いは、FileStream
はバイト用であり、StreamWriter
はテキスト用です。
これらは、既知のデータソースに情報を出力する際に使用される2つの異なるレベルです。
FileStreamはストリームの一種であり、概念的にはある場所を指し、その場所との間で送受信されるデータを処理できるメカニズムです。ファイル、ネットワーク接続、メモリ、パイプ、コンソール、デバッグおよびトレースリスナー、および他のいくつかのタイプのデータソースの読み取り/書き込み用のストリームが存在します。具体的には、ファイルシステムへの読み取りと書き込みを実行するFileStreamが存在します。ほとんどのストリームは、使用量がかなり低レベルであり、データをバイトとして処理します。
StreamWriterは、そのストリームを使用してプレーンテキストを出力することを簡素化するStreamのラッパーです。バイトの代わりに文字列を取るメソッドを公開し、バイト配列との間で必要な変換を実行します。他の作家がいます。使用するもう1つの主なものは、XML形式でのデータの書き込みを容易にするXmlTextWriterです。同様に、ストリームをラップしてデータの取り出しを容易にするライターに対応するリーダーもあります。
(上記のコメントに加えて)1つの重要な違いは、FileStreamが、指定されたFileStream.Positionへのランダムディスクアクセスの読み取りと書き込みをサポートすることです。大規模なファイル変更の場合、それは非常に貴重です。