InputStreamとReader、FileInputStreamとFileReaderの違い



Difference Between Inputstream



まず、InputStreamとReaderの違い

InputStreamとReaderの両方を使用して、データを読み取ることができます(ファイルからデータを読み取るか、ソケットからデータを読み取る)。主な違いは次のとおりです。

InputStreamは2進数(バイトストリーム)の読み取りに使用され、Readerはテキストデータ(Unicode文字)の読み取りに使用されます。では、2進数とテキストデータの違いは何ですか?基本的に、読み取られるコンテンツはすべてバイトです。バイトをテキストに変換するには、エンコード方法を指定する必要があります。リーダーはバイトストリームをエンコードしてテキストに変換できます。もちろん、この変換プロセスにはエンコード方式が含まれます。システムのデフォルトのエンコード方式を使用して、デフォルトでバイトストリームをエンコードします。また、「UTF-8」などのエンコード方式を明示的に指定することもできます。概念は非常に単純ですが、Javaプログラマーはコーディングエラーを起こすことがよくあります。最も一般的な間違いは、エンコーディングを指定しないことです。ファイルの読み取りやソケットからのデータの読み取り時に、正しいエンコード方法が指定されていないと、読み取ったデータが文字化けし、データが失われる可能性があります。

次に、FileInputStreamとFileReaderの違い

FileInputStreamとFileReaderには同様の違いがあります。これらはファイルからデータを読み取るために使用されますが、FileInputStreamはファイルからバイナリデータ(バイトストリーム)を読み取るために使用され、FileReaderはファイルから文字データを読み取るために使用されます。

FileReaderは、システムのデフォルトエンコーディングを使用するか、InputStreamReaderで使用されるエンコーディングを使用するInputStreamReaderを継承します。 InputStreamReaderは文字エンコードをキャッシュするため、InputStreamReaderオブジェクトを変更した後、文字エンコードを変更しても効果がないことに注意してください。 FilelnputstreamとFileReaderの使用例を次に示します。






プログラムの結果は次のとおりです。

7465737420726561642066696c65
テスト読み取りファイル

上記のコードからわかるように、FilelnputStreamは1バイトと1バイトのデータを読み取るため、読み取り速度が遅くなります。同時に、readメソッドはBlockingメソッドであり、1バイトまたはブロックを読み取ります(読み取ることができるデータを待機します)。このメソッドの戻り値は、読み取られたバイト数です。ファイルの最後まで読み取られると、-1が返されます。FileInputStreamを使用する例では、各ループが1バイトを読み取り、それを16進文字列出力に変換します。 FileReader Iのreadメソッドは、一度に1文字ずつ読み取ります。ファイルの終わりが読み取られるまで、このメソッドは-1を返します。

上海 Shang XuetangJavaトレーニング ここでは、テクニカルドライグッズのFileInputStreamとFileReaderの違いについて説明します。その他のJava技術知識の記事については、このブログの他の記事を参照してください。Java学習教材のビデオが必要です。コメントを残してください。 Shang XuetangJavaの詳細な学習教材ビデオのフルセットとPython400セットのビデオおよびプログラマー練習マニュアル、乾物は非常に優れています。