StringReader java.io.Reader

1618 ワード

java.io.Readerは文字の流れを読み取る抽象的なクラスであり、Readerクラスを継承することによって、文字の流れを読みやすくすることができます。例えば、文字列を文字列(文字)の流れとして読み取り、ファイルの内容を一連の流れとして読み取ることもできます。
Java(1.6.x)では、いくつかのReaderの直接継承クラスが提供されています。具体的には、BufferedReader、ChararrayReader、FileReader、InputStreamReader、PipedReader、StringReaderなど、サブクラスが実現する方法はread(char[int]、int)とcloseだけです。
ここでは主にStringReaderとFileReaderの2つを紹介します。
1、StringReaderはStringReaderを通じて、一つの文字列を一連のストリームとして読み取りやすく、具体的なコードは以下の通りである。
String s = "    ";
//    Reader  
Reader r = new StringReader(s);
char[] buffer = new char[256];
try {
//             buffer 
int dataLen = r.read(buffer);
//                  
System.out.println(new String(buffer, 0, dataLen));
} catch (IOException e) {
e.printStackTrace();
}
なお、Readerオブジェクトの末尾は文字列の最後の文字ではなく、-1であるため、dataLenが-1である場合には、すでに読み取り済みであることを示している。
2、FileReaderはFilterReaderを通じて一つのファイルの内容を簡単に入手でき、内容を一連の文字ストリームとして読み取る。具体的な例コードは以下の通りである。
//        ,      ,          
char[] buffer = new char[512];
File file = new File("D:/test.txt");
try {
Reader r = new FileReader(file);
int dataLen = r.read(buffer);
System.out.println(new String(buffer, 0, dataLen));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
私たちはtest.txtのテキスト文書を作成し、その中に3行入力します。A B Cは上のコードで読み取ります。出力の結果は、A B Cは注意すべきことは、dataLenの値は7で、各文字は2バイトを占めます。これは最後にもう1バイトがあるということです。
int dataLen = r.read(buffer);
後にもう一度実行します。
dataLen = r.read(buffer);
これは、最後のビット値も−1であり、バイトの長さを占用することを示す。
はい、ここで終わります。java.io.Reader家族はいくつかの実用的な応用の中でとても便利で、仲直りができます。