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(someStream, 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)