当我从资源中的.json文件加载一些模拟数据时,有时数据会返回损坏并显示��������������������符号。但是实际数据没有这些符号。我试图加载的代码根本不知道为什么会发生这种情况?谢谢
fun loadJSONFromAsset(fileName: String): String? {
val json: String
try {
val `is` = javaClass.classLoader.getResourceAsStream(fileName)
val size = `is`.available()
val buffer = ByteArray(size)
`is`.read(buffer)
`is`.close()
json = String(buffer, Charset.defaultCharset())
} catch (ex: IOException) {
ex.printStackTrace()
return null
}
return json
}
答案 0 :(得分:2)
未单独压缩的文件在放入资产文件夹时将被压缩。您必须使用AssetManager
打开文件val jsonString = context
.assets
.open("myfile.json")
.bufferedReader()
.readText()
或在构建时禁用.json
文件的压缩。
android {
aaptOptions {
noCompress 'json'
}
}
此外,我认为您没有充分的理由使用classLoader.getResourceAsStream(fileName)
打开apk中捆绑的文件,在Android上您可以使用AssetManager
或Resources
。我刚刚发现了这个interesting article,它表明使用getResourceAsStream也会非常慢。