String属性可以在Kotlin中多久?
我创建了简单的Base64Images
助手类,它包含这个主体:
companion object{ val ABSTRACT_COLORS = "[image encoded in base64]" }
ABSTRACT_COLORS
实际上是一个有570438个字符的字符串。
编译期间,我得到了:
org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Failed to generate property ABSTRACT_COLORS ... ... The root cause was thrown at: ByteVector.java:213 at org.jetbrains.kotlin.codegen.MemberCodegen.genFunctionOrProperty(MemberCodegen.java:205) Caused by: java.lang.IllegalArgumentException
我以为我可以在一个字符串中存储2147483647(2 31 – 1)个字符。
这是为什么?
我发布了下面的这张图片。
你可以使用这个工具来生成base64。
提示:编辑这个类或编译项目冻结Android Studio。
我会用一些轻量级的编辑器编辑和终端来编译它。
正如在@ mfulton26的评论中提到的,加载字符串时编译器正在进行一些操作。 应该向Kotlin问题跟踪器报告的崩溃错误。
作为解决方法,您可以将其作为文件添加到src/main/resources
目录中,并以String
或ByteArray
动态加载字符串。
例如,如果文件是src/main/resources/abstract-colors.txt
,则可以将整个文件读入一个字符串 :
val ABSTRACT_COLORS = javaClass.getResourceAsStream("/abstract-colors.txt") .bufferedReader().use { it.readText() }
如果你不需要它被base64编码,你可以将图像存储为二进制,并将其读入一个ByteArray
。
val ABSTRACT_COLORS = javaClass.getResourceAsStream("/abstract-colors.jpg") .use { it.readBytes() }