Функция bufferedReader

Функция bufferedReader создает объект BufferedReader для эффективного чтения текстовых файлов. Буферизация значительно увеличивает производительность при чтении больших файлов. Функция автоматически закрывает поток после использования благодаря расширению use.

Импорт

kotlinimport java.io.File
import java.io.BufferedReader

Синтаксис

kotlinfun File.bufferedReader(
  charset: Charset = Charsets.UTF_8
): BufferedReader
kotlinfun File.bufferedReader(
  charset: Charset = Charsets.UTF_8,
  bufferSize: Int = DEFAULT_BUFFER_SIZE
): BufferedReader

Пример

Прочитаем весь файл data.txt с помощью bufferedReader:

kotlinval file = File("data.txt")
val reader: BufferedReader = file.bufferedReader()
val content: String = reader.use { it.readText() }
println(content)

Результат выполнения кода:

kotlinString "abcde"

Пример

Прочитаем файл построчно с указанием кодировки:

kotlinval file = File("data.txt")
val reader = file.bufferedReader(Charsets.ISO_8859_1)

reader.useLines { lines ->
  lines.forEach { line ->
    println(line)
  }
}

Результат выполнения кода:

kotlinString "line 1"
String "line 2"
String "line 3"

Пример

Прочитаем файл с использованием кастомного размера буфера:

kotlinval file = File("large_data.txt")
val reader = file.bufferedReader(Charsets.UTF_8, 8192)

var lineCount = 0
reader.use { r ->
  while (r.readLine() != null) {
    lineCount++
  }
}

println("Total lines: $lineCount")

Результат выполнения кода:

kotlinString "Total lines: 150"

Пример

Чтение файла по частям с помощью read:

kotlinval file = File("data.bin")
val reader = file.bufferedReader()

val buffer = CharArray(1024)
var bytesRead: Int

reader.use { r ->
  while (r.read(buffer).also { bytesRead = it } != -1) {
    val chunk = String(buffer, 0, bytesRead)
    println("Read chunk: ${chunk.length} chars")
  }
}

Результат выполнения кода:

kotlinString "Read chunk: 1024 chars"
String "Read chunk: 512 chars"

Смотрите также

  • функцию readText,
    которая читает весь файл как одну строку
  • функцию readLines,
    которая читает файл как список строк
  • функцию forEachLine,
    которая обрабатывает каждую строку файла
  • функцию bufferedWriter,
    которая создает буферизированный поток для записи