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目录中,并以StringByteArray动态加载字符串。

例如,如果文件是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() }