Функция bufferedReader
Функция bufferedReader создает объект BufferedReader
для эффективного чтения текстовых файлов. Буферизация значительно
увеличивает производительность при чтении больших файлов.
Функция автоматически закрывает поток после использования
благодаря расширению use.
Импорт
import java.io.File
import java.io.BufferedReader
Синтаксис
fun File.bufferedReader(
charset: Charset = Charsets.UTF_8
): BufferedReader
fun File.bufferedReader(
charset: Charset = Charsets.UTF_8,
bufferSize: Int = DEFAULT_BUFFER_SIZE
): BufferedReader
Пример
Прочитаем весь файл data.txt с помощью bufferedReader:
val file = File("data.txt")
val reader: BufferedReader = file.bufferedReader()
val content: String = reader.use { it.readText() }
println(content)
Результат выполнения кода:
String "abcde"
Пример
Прочитаем файл построчно с указанием кодировки:
val file = File("data.txt")
val reader = file.bufferedReader(Charsets.ISO_8859_1)
reader.useLines { lines ->
lines.forEach { line ->
println(line)
}
}
Результат выполнения кода:
String "line 1"
String "line 2"
String "line 3"
Пример
Прочитаем файл с использованием кастомного размера буфера:
val 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")
Результат выполнения кода:
String "Total lines: 150"
Пример
Чтение файла по частям с помощью read:
val 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")
}
}
Результат выполнения кода:
String "Read chunk: 1024 chars"
String "Read chunk: 512 chars"
Смотрите также
-
функцию
readText,
которая читает весь файл как одну строку -
функцию
readLines,
которая читает файл как список строк -
функцию
forEachLine,
которая обрабатывает каждую строку файла -
функцию
bufferedWriter,
которая создает буферизированный поток для записи