我创建了简单的 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 (231 - 1)字符串中的字符。
这是为什么?
我在下面发布了这张图片。
您可以使用 this tool生成 base64。
提示:编辑此类或编译项目会卡住 Android Studio。
我会使用一些轻量级的编辑器来编辑和终端来编译它。
最佳答案
正如@mfulton26 在评论中提到的那样,编译器在加载字符串时发生了一些事情。应报告给 Kotlin issue tracker 的崩溃错误.
作为变通方法,您可以将其作为文件添加到您的 src/main/resources
目录中,并以 String
或 的形式动态加载字符串>字节数组
。
例如,如果文件是src/main/resources/abstract-colors.txt
,你可以read the entire file into a string :
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() }
关于android - Kotlin 中的 String 属性可以有多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39573984/