web-dev-qa-db-ja.com

ReaderとInputStreamの違いは何ですか?

ReaderとInputStreamの違いは何ですか?そして、いつ何を使用するのですか? Readerを使用して文字を読み取ることができる場合、なぜinputstreamを使用するのか、オブジェクトを読み取ると思いますか?

79
sab

InputStreamは、リソースから情報を取得する生のメソッドです。いかなる種類の変換も実行せずに、バイト単位でデータを取得します。画像データまたは任意のバイナリファイルを読み取る場合、これは使用するストリームです。

Readerは、文字ストリーム用に設計されています。読んでいる情報がすべてテキストである場合、リーダーは文字のデコードを処理し、生の入力ストリームからUnicode文字を提供します。任意のタイプのテキストを読んでいる場合、これは使用するストリームです。

InputStreamReaderクラスを使用して、InputStreamをラップしてリーダーに変換できます。

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
121
Berin Loritsch

InputStreamsは、ストリームからバイトを読み取るために使用されます。そのため、画像、ビデオ、シリアル化されたオブジェクトなどのバイナリデータに役立ちます。

一方、リーダーは文字ストリームであるため、文字データの読み取りに最適です。

17

混乱の原因は、 InputStream.read()intを返し、 Reader.read()int

違いは、InputStream.read()はバイトストリームの生のコンテンツに対応する0から255の間のバイト値を返し、Reader.read()は0から65357の間の文字値を返すことです(65358があるため)異なるユニコードコードポイント)

InputStreamを使用すると、コンテンツをバイト単位で読み取ることができます。たとえば、コンテンツ「a‡a」は5バイトのストリームとして読み取られます。つまり、_97_、_226_、_128_、_161_および_97_ここで_a -> U+0061 -> 0x61 -> 97_および‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161

Readerを使用すると、コンテンツを1文字ずつ読み取ることができるため、コンテンツ「a‡a」は3文字として読み取られます_97_、_8225_および_97_ここで_a -> U+0061 -> 0x61 -> 97_および_‡ -> U+2021 -> 0x2021 -> 8225_。

7
ecerulm

1つはバイトを受け入れ、もう1つは文字を受け入れます。

1
Aaron McIver