B-Teck!

お仕事からゲームまで幅広く

【Java/Kotlin】BufferedReaderの今風な書き方を調べてみた

Javaで書かれたBufferedReaderの処理をKotlin化する中で、
イマドキのJavaでの扱い方と、Kotlinの場合どう書くかを調べてみました。

サンプルはすべてsomeStream という入力を連結する場合の例です。

いにしえの書き方(Java)

BufferedReaderで入力が取れなくなるまでループする。

StringBuilder sb = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(someStream, "UTF-8"));
while ( (line = br.readLine()) != null ) {
    sb.append(line);
}
br.close();
String result = sb.toString();

いまふうの書き方(Java)

Java 8から増えたBufferedReader.lines()でStreamとして取り出し、
Collectors.joining()で1つのStringにつなげる。
BufferedReaderはtry-with-resource文を使ってあげることで自動でcloseしてくれます。
いにしえの書き方よりだいぶシュッと書けます。

String result;
try (BufferedReader br 
    = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8))
) {
    result = br.lines().collect(Collectors.joining());
}

Kotlinで書くと…?

KotlinではInputStream.buferedReader()が生えているのでシュシュッと書けます。
BufferedReaderはcloseableなのでuseを使ってあげると自動でcloseしてくれます。

val result = someStream.bufferedReader().use { it.readText() }

参考:
java - Best way to use BufferedReader in Kotlin - Stack Overflow
bufferedReader - Kotlin Programming Language
use - Kotlin Programming Language
BufferedReader (Java Platform SE 8)