Искаженный Json при загрузке из файла - PullRequest
0 голосов
/ 14 декабря 2018

когда я загружаю некоторые фиктивные данные из файла .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
    }

1 Ответ

0 голосов
/ 14 декабря 2018

Файлы, которые не сжимаются сами по себе, будут сжаты при помещении в папку ресурсов.Вы должны либо открыть свой файл с помощью AssetManager

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

, либо отключить сжатие для .json файлов во время сборки.

android {
    aaptOptions {
       noCompress 'json'
    }
}

Кроме того, я не думаю, что у вас когда-либо будетХорошая причина, чтобы открыть файлы, связанные в apk с classLoader.getResourceAsStream(fileName), на Android вы можете использовать AssetManager или Resources.Я только что нашел эту интересную статью , она показывает, что использование getResourceAsStream также может быть очень медленным.

...