まず、InputStreamReaderとFileReaderの違いを紹介します。特定のコンテンツは次のとおりです。
inputStreamReaderおよびBufferedReader。それらの中で最も重要なクラスは、入力StreamReaderです。これは、バイトを文字に変換するためのブリッジです。コンストラクターのエンコードメソッドを再指定できます。指定されていない場合、GBKなど、基礎となるオペレーティングシステムのデフォルトのエンコード方法が採用されます。
FileReaderおよびinputStreamReaderには、変換のエンコード(エンコードメソッドを指定するか、OSのデフォルトエンコードを使用)を含み、異なるプラットフォームで文字化けコードが発生する場合があります。 FileInputStreamはバイナリモードで処理されており、コードが刻まれていません。
FileInputStreamバイトストリームは、バイトバイトの読み取りです。
FileReaderの文字ストリームは、文字として1つずつ読み取られます。
bufferedreader bufreader = null; inputstreamreader isr = null; filereader fr = null; try {for(string filename:filenames){方法1:ISR = new fileinputStream( "d:/test.txt")、 "utf-8"); bufreader = new BufferedReader(ISR);方法2:fr = new fileReader( "d:/test.txt"); bufreader = new BufferedReader(FR); while(bufreader.ready()){// 1。データ文字列dataline = bufreader.readline();の各行を取得します。 }}InputStreamとReaderの違い
java.ioの下には2つの抽象クラスがあります:inputstreamとreader
inputStreamは、バイト入力ストリームのすべてのクラスを表すスーパークラスです。
リーダーは、キャラクターストリームを読むための抽象クラスです
InputStreamは、テキスト読み取りではなくバイトストリームの読み取りを提供します。これは、それとリーダークラスの根本的な違いです。
つまり、Charアレイまたは文字列はReaderを使用して読み取られ、バイト配列はinputStreamを使用して読み取られます。
2つのスーパークラスの根本的な違いを明確にした後、以下のサブクラスの使用を見てみましょう。これが最も一般的に使用されている説明のほんの一部です
inputstream
| __FileInputStream
FileInputStreamは、ファイルシステム内のファイルから入力バイトを取得します。
建設方法の概要
fileInputStream(ファイルファイル)
ファイルシステムのファイルオブジェクトファイルによって指定された実際のファイルへの接続を開くことにより、FileInputStreamを作成します。
fileInputStream(filedeScriptor fdobj)
ファイル記述子FDOBJを使用してFileInputStreamを作成します。これは、ファイルシステム内の実際のファイルへの既存の接続を表します。
fileInputStream(文字列名)
ファイルシステムのPathName名で指定された実際のファイルへの接続を開くことにより、FileInputStreamを作成します。
リーダー
| - バッファーリーダー
| ___ inputStreamReader
| __FILEREADER
BufferedReader:文字入力ストリームからテキストを読み取り、個々の文字をバッファリングして、文字、配列、行を効率的に読み取ります。
建設方法の概要
bufferedreader(in in)
デフォルトのサイズ入力バッファーを使用するバッファー文字入力ストリームを作成します。
BufferedReader(Reader in、int sz)
指定されたサイズの入力バッファーを使用するバッファー文字入力ストリームを作成します。
BufferedReader(Java Platform SE 6)
BufferedReaderの最大の機能は、バッファー設定です。通常、読者が作成したすべての読み取りリクエストにより、基礎となるキャラクターまたはバイトストリームの対応する読み取りリクエストが発生します。バッファリングがない場合、read()またはreadline()への呼び出しは、ファイルから読み取り、文字に変換されて返品するバイトを作成します。これは非常に非効率的です。
BufferedReaderを使用して、バッファーのサイズを指定するか、デフォルトのサイズを使用できます。ほとんどの場合、デフォルト値は十分に大きいです。
したがって、read()操作がBufferedReaderを使用して高価な(FileReaderやinputStreamReaderなど)を包むすべての読者をラップすることをお勧めします。
例えば、
BufferedReader in = new BufferedReader(new FileReader( "foo.in"));
指定されたファイルへのバッファ入力。
inputStreamReader(JavaプラットフォームSE 6)
InputStreamReaderは、バイトストリームと文字ストリーム間のブリッジです。指定されたcharsetを使用してバイトを読み取り、文字にデコードします。使用する文字セットは、名前で指定または明示的に与えられるか、プラットフォームのデフォルトの文字セットを受け入れることができます。
建設方法の概要
inputStreamReader(InputStream in)は、デフォルトの文字セットを使用するInputStreamReaderを作成します。 inputStreamReader(inputStream in、charset cs)は、指定された文字セットを使用するinputstreamReaderを作成します。 inputStreamReader(inputStream in、charsetdecoder dec)は、指定された文字セットデコーダーを使用する入力StreamReaderを作成します。 inputStreamReader(inputStream in、string charsetname)指定された文字セットを使用するinputstreamReaderを作成します。
inputstreamReaderのread()メソッドへの各呼び出しは、基礎となる入力ストリームから1つ以上のバイトが読み取られます。バイトからキャラクターへの効果的な変換を有効にするために、現在の読み取り操作を満たすために必要なバイトを超えて、基礎となるストリームのバイトを事前に読むことができます。
最大の効率を実現するには、BufferedReader内にinputStreamReaderをラッピングすることを検討してください。例えば:
BufferedReader in = new BufferedReader(new inputStreamReader(System.in));
inputStreamReaderの最大の機能は、他のクラスでは不可能な変換の固定エンコード形式を参照できることです。建設方法から見ることができます。これは、漢字を読むときに非常に便利です。
ファイルリーダー
1)Filreaderクラスの紹介:
inputstreamReaderクラスのサブクラス、すべてのメソッド(read()など)は、親クラスのinputstreamReaderから継承されます。
2)inputStreamReaderクラスとの違い:
建設方法の概要
fileReader(ファイルファイル)
データが読み取られるファイルを与えられた新しいFilReaderを作成します。
filreader(filedescriptor fd)
データが読み取られるFileDeScriptorを与えられた新しいFilreaderを作成します。
FileReader(StringFilename)
データが読み取られるファイル名を与えられた新しいFilReaderを作成します
このクラスとその親クラスのinputstreamReaderの主な違いはコンストラクターであり、主な違いはコンストラクターです!
inputStreamReaderのコンストラクターから、パラメーターは入力ストリームおよびエンコードメソッドです。エンコードメソッドを指定する場合、inputstreamreaderクラスを使用する必要があることがわかります。また、FileReaderコンストラクターのパラメーターは、fileinputStreamと同じです。これは、パスを表すファイルオブジェクトまたは文字列です。ファイルオブジェクトまたは文字列に基づいてファイルを読みたい場合は、FileReaderを使用することがわかります。
Filreaderのサブクラスの機能は、この小さな分業にあると思います。このクラスとその親クラスのinputstreamReaderの主な違いはコンストラクターであり、主な違いはコンストラクターです!
inputStreamReaderから
コンストラクターでは、パラメーターは入力ストリームおよびエンコードメソッドです。エンコードメソッドを指定する場合、inputstreamreaderクラスを使用する必要があることがわかります。また、FileReaderコンストラクターのパラメーターは、fileinputStreamと同じです。これは、パスを表すファイルオブジェクトまたは文字列です。ファイルオブジェクトまたは文字列に基づいてファイルを読みたい場合は、FileReaderを使用することがわかります。
Filreaderのサブクラスの機能は、この小さな分業にあると思います。
2つの接続と違い
(1)文字とバイト:
FileInputStreamクラスはバイナリ入力/出力を使用し、I/O速度は高速かつ効率的ですが、その読み取り()メソッドはバイト(バイナリデータ)を読み取ります。
読者のクラスはこの欠陥を補い、テキスト形式で入力/出力を入力できますが、これは非常に便利です。たとえば、while(ch = fileReader.read())!= -1)ループを使用してファイルを読み取ることができます。 BufferedReaderのReadLine()メソッドを使用して、テキストラインごとに読み取ることができます。
(2)エンコーディング
InputStreamReaderは、バイトを文字に変換するためのブリッジです。コンストラクターのエンコードメソッドを再指定できます。指定されていない場合、GBKなど、基礎となるオペレーティングシステムのデフォルトのエンコード方法が採用されます。
FileReaderおよびinputStreamReaderには、変換のエンコード(エンコードメソッドを指定するか、OSのデフォルトエンコードを使用)を含み、異なるプラットフォームで文字化けコードが発生する場合があります。 FileInputStreamはバイナリモードで処理されており、コードが刻まれていません。
したがって、エンコードメソッドを指定する場合、inputstreamReaderクラスを使用する必要があるため、バイトを文字に変換するためのブリッジです。
(3)キャッシュ領域
BufferReaderクラスは、読み取り()操作が高価な場合(FilreaderやinputStreamReaderなど)すべての読者をラップするために使用されます。
(4)標準化された使用法
上記を要約して、より良い標準使用法を考え出します。
1)file file = new file( "hello.txt");
fileInputStream in = new fileInputStream(file);
2)file file = new file( "hello.txt");
fileInputStream in = new fileInputStream(file); inputStreamReader indeader = new inputStreamReader(in、 "utf-8"); BufferedReader bufreader = new BufferedReader(Inreader);
3)ファイルファイル= newファイル( "hello.txt");
filreader fileReader = new fileReader(file); BufferedReader bufreader = new BufferedReader(fileReader);