在Kotlin中,bufferedReader()到底如何工作? [英] How exactly does bufferedReader() work in Kotlin?
问题描述
因此,我正在尝试从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屋!