2017-03-29 4 views
-1

2つの関連質問代わりにバイト配列の文字列を返します。はなぜStreamReaderをは

  1. なぜ彼らはStreamReader.ReadToEnd()代わりのbyte[]からstringを返すために選んだのですか?
  2. System.Text.Encodingを使用して変換できますが、どのエンコーディングを使用すればよいですか? UTF8、UTF7、ASCIIまたはUnicode?私はバイナリファイルを扱っています。

注:明確にするように求められました。それは単にというストリームという文字列がバイトレベルの印象を与えているということだけです... ... ストリーム(ネットワークストリーム、ファイルストリーム、バッファと考えると、いずれもchar型のコンセプトではない)。ジョエルの答えで正しく示されているように、これは何よりも命名の問題です。

+0

TextReaderが文字列を返さないようにする理由が非常に不明です。いくつかの推論は質問への更新を歓迎するでしょう。 –

+0

@AlexeiLevenkov:説明が追加されました。 – dotNET

答えて

2

本当に答えられるのは、製品のデザイン委員会のメンバーだけなので、「なぜ」という質問は、スタックオーバーフローの飼い主にとってめったに良いことではありません。

しかし、このケースでは、我々は、少なくともあなたが見つけるStreamReader documentation、にあなたを指すことによって、あなたに良い指標を与えることができ、この:

はでバイトストリームから文字を読み込むたTextReaderを実装します特定のエンコーディング。

したがって、バイトではなくテキストでの作業は、StreamReaderの概要です。 「TextStreamReader」ではなく「StreamReader」という名前が付けられている理由を尋ねるかもしれませんが、最初の文に戻って参照する必要があります。

バイト配列を取得する方法は、あなたが何をしたいかによって異なります。 .NetはUnicodeを文字列に使用していますが、基本となるストリームは何か異なる可能性があります。このデータを使用する予定があれば、まったく別のエンコーディングが必要になることがあります。

しかし、この場合、バイナリファイルがあり、Byte[]が必要です。ストリームをまったく混乱させるのではなく、ただFile.ReadAllBytes()を見てください。ストリームを処理する必要がある場合は、BinaryReaderも必要です。

+0

うーん...洞察力。特定のオフセットから読み込む必要があるので 'ReadAllBytes'を使うことはできませんが、' BinaryReader'は良い代替です。名前自体が少し誤解を招くだけです。 – dotNET

+0

@ドットネットうん、ちょうど名前にプログラムする。しかし、ドキュメンテーションのすべてのセクションは貴重なものになる可能性があります。時には名前空間、場合によってはアセンブリ、場合によっては重要な情報を保持することさえあります。この場合、継承階層です。 –

0

StreamReaderに代わるいくつかの選択肢があります。これは主に文字データの読み込みに使用されます。バイナリファイルのデータを読み込む場合は、FileStream.Readを使用することをお勧めします。データをバイト配列で返します。

私のベンチマークによると、それはBinaryReaderFile.ReadAllBytesよりも速いです。しかし、File.ReadAllBytesは使いやすくなっています。

関連する問題