在Kotlin中,bufferedReader()到底如何工作? [英] How exactly does bufferedReader() work in Kotlin?

查看:161
本文介绍了在Kotlin中,bufferedReader()到底如何工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我正在尝试从Android项目中的.json文件读取数据:

So I'm trying to read data from a .json file in my Android project:

val file = context.assets.open("myfile.json").bufferedReader().readText()

这可以正常工作,并成功将我的.json文件作为一个String打印出来.

This works fine and successfully prints out my .json file as one String.

但是我想知道bufferedReader()到底是什么,为什么不能直接在打开的.json文件上调用.readText().

However I want to know what exactly is bufferedReader() and why .readText() can't be called directly on the opened .json file.

PS:readText()返回String.但是:

val json2: JSONObject = JSONObject("mystring")返回:

Caused by: org.json.JSONException: Value mystring of type java.lang.String cannot be converted to JSONObject

这有什么意义?

推荐答案

readText函数定义为Reader的扩展:

public fun Reader.readText(): String {
    val buffer = StringWriter()
    copyTo(buffer)
    return buffer.toString()
}

InputStream不是Reader,因此您必须将其转换为某些Reader:

An InputStream isn't a Reader, so you have to transform it into some Reader:

public inline fun InputStream.reader(charset: Charset = Charsets.UTF_8): InputStreamReader = 
    InputStreamReader(this, charset)

您可以使用bufferedReader替代功能将阅读器用作缓冲阅读器:

You can use the reader as a buffered reader with the alternative bufferedReader function:

public inline fun InputStream.bufferedReader(charset: Charset = Charsets.UTF_8): BufferedReader = 
    reader(charset).buffered()

Reader以及 BufferedReader 是Java标准库的一部分,其缓冲版本描述如下:

Reader and also BufferedReader are part of the Java standard library and the buffered version is described like this:

从字符输入流中读取文本,缓冲字符以便 提供有效读取字符,数组和行的方法.

Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.

通常,由读取器发出的每个读取请求都会导致对基础字符或字节流进行相应的读取请求.它是 因此建议将BufferedReader包装在其read()的所有Reader周围 操作可能很昂贵,例如FileReaders和InputStreamReaders ...

In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders...

它基本上包装了Reader并增加了对读取单行等的支持.

It basically wraps a Reader and adds support for reading single lines etc.

这篇关于在Kotlin中,bufferedReader()到底如何工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆