どのように優雅な読み取りストリーム
3537 ワード
JavaでInputStreamの読み取りについて多くの人がすぐに次のような書き方を考えています.
以下のクラスはいずれも
最終的に読み取りに成功するかどうかは、このストリームを閉じる必要があります.そして、膨大なコードです.
多くの友人は毎日このような苦痛に耐えていると推定しているが、JDK 7の発表以来、
では、上のこのファイルの読み取りはC#で書くことができます.
これで終わりですか???今すでにJDK 8になって、良い常用クラスはすべてSteamを拡張して、例えば
はい、あなたは間違っていません...コードだけだ!!!
あなたのjdkが7以上であれば、
について述べる
もっとサボっている友達はこう書くかもしれません.
では、このように書くのは正しくありません.詳しくは、JAVAプログラマーの修練の道を読んでください.
InputStream inputStream = null;
InputStreamReader reader = null;
BufferedReader bufferedReader = null;
try {
inputStream = new FileInputStream("/home/0x1024/1024.txt");
reader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(reader);
String temp;
StringBuilder sb = new StringBuilder();
while (null != (temp = bufferedReader.readLine())) {
sb.append(temp);
}
System.out.print(sb.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != inputStream){
inputStream.close();
}
if (null != reader){
reader.close();
}
if (null != bufferedReader){
bufferedReader.close();
}
}
以下のクラスはいずれも
Closeable
を実現しているので、読み取りが完了したら閉じる必要があります. InputStream inputStream
InputStreamReader reader;
BufferedReader bufferedReader;
最終的に読み取りに成功するかどうかは、このストリームを閉じる必要があります.そして、膨大なコードです.
if (null != inputStream){
inputStream.close();
}
if (null != reader){
reader.close();
}
if (null != bufferedReader){
bufferedReader.close();
}
多くの友人は毎日このような苦痛に耐えていると推定しているが、JDK 7の発表以来、
Closeable
インターフェースはAutoCloseable
というインターフェースを拡張した.public interface Closeable extends AutoCloseable {
void close() throws IOException;
}
では、上のこのファイルの読み取りはC#で書くことができます.
try (InputStream inputStream = new FileInputStream("/home/0x1024/1024.txt");
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader)) {
String temp;
StringBuilder sb = new StringBuilder();
while (null != (temp = bufferedReader.readLine())) {
sb.append(temp);
}
System.out.print(sb.toString());
}catch (IOException e){
e.printStackTrace();
}
これで終わりですか???今すでにJDK 8になって、良い常用クラスはすべてSteamを拡張して、例えば
BufferedReader
、1つのpublic Stream lines()
方法があって、それでは上のコードは更に優雅になることができます. try (InputStream inputStream = new FileInputStream("/home/0x1024/1024.txt");
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader)) {
System.out.println(bufferedReader.lines().collect(Collectors.joining()));
}catch (IOException e){
e.printStackTrace();
}
はい、あなたは間違っていません...コードだけだ!!!
あなたのjdkが7以上であれば、
Closeable
を実現すればtry(...){...} コードを引く方法があります.について述べる
もっとサボっている友達はこう書くかもしれません.
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("/home/0x1024/1024.txt")))) {
System.out.println(bufferedReader.lines().collect(Collectors.joining()));
}catch (IOException e){
e.printStackTrace();
}
では、このように書くのは正しくありません.詳しくは、JAVAプログラマーの修練の道を読んでください.