val file = context.assets.open("myfile.json").bufferedReader().readText()
Вот код, который делает то же самое, что и строка выше.
val inputStream = context.assets.open("myfile.json")
val reader = inputStream.bufferedReader()
val file = reader.readText()
Предположим, что здесь содержится содержание myfile.json
{
"os": "Android",
"version": "KitKat",
"codeName": 4.4
}
Давайте пройдемся по шагамstep
Step 1: Первая строка
val inputStream = context.assets.open("myfile.json")
Будет возвращен объект InputStream , который читает один байт или количество байтовиз файла JSON.Если вы распечатаете содержимое файла json в байтовом формате на экране, нам (программистам) будет очень трудно читать.
Шаг 2: Вторая строка
val reader = inputStream.bufferedReader()
Это создаст BufferedReader объект, который читает символ или количество символов из файла json, но у них есть другой полезный метод с именем readLine () , этот методчитает строку текста.Строка считается завершенной любым из перевода строки ('\ n'), возврата каретки ('\ r') или возврата каретки, за которым сразу следует перевод строки.
Давайте изменимтекущий код.
val inputStream = context.assets.open("myfile.json")
val reader = inputStream.bufferedReader()
// Read line by line from reader until reach the end.
var line = reader.readLine()
while(line != null) {
Log.i("TAG", line)
line = reader.readLine()
}
Вывод:
I/TAG: {
I/TAG: "os": "Android",
I/TAG: "version": "KitKat",
I/TAG: "codeName": 4.4
I/TAG: }
Как мы видим, они печатают 5 строк из файла json.Но в некоторых случаях мы хотим напечатать весь файл json в виде строки, поэтому перейдем к следующему шагу.
Шаг 3: Третья строка
val file = reader.readText()
Это полностью считывает буфер чтения как String.Вы можете написать свой собственный, чтобы сделать то же самое, как.
val inputStream = context.assets.open("myfile.json")
val reader = inputStream.bufferedReader()
val sb = StringBuffer()
var line = reader.readLine()
while(line != null) {
Log.i("TAG", line)
sb.append(line).append("\n")
line = reader.readLine()
}
val file = sb.toString()
Log.i("TAG", file)
Вывод:
I/TAG: {
"os": "Android",
"version": "KitKat",
"codeName": 4.4
}
Этот вывод такой же, как reader.readText()
.
Вывод: BufferReader оборачивает InputStream (или подклассы InputStream) внутри них, а затем предоставляет методы для считывания посимвольных символов вместо побайтных в InputStream.Кроме того, они предоставляют метод readLine (), буферизующий данные.
InputStream (побайтовый) -> Reader (посимвольный)
InputStream (byte-by-byte) -> BufferReader (символьный символ, строка чтения, данные буфера).