字符串属性可以在Kotlin中多久?
我创建简单Base64Images
的辅助类,其中包含该机构:字符串属性可以在Kotlin中多久?
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
或ByteArray
。
例如,如果该文件是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() }
字符串小于0.5MB而不是0.5GB;)我知道我可以从文件中加载内容......但仍然可以在编译时使用它。 – mklimek
@mklimek啊,我在脑海里加了一个'K'。 –
@mklimek编辑并离开答案(未来的其他人可能需要这项工作,答案也是针对社区的) –
这看起来像一个编译错误。例如如果编译器由于没有足够的内存分配而失败,那么抛出的异常应该声明这种情况(它不会)。我建议在https://youtrack.jetbrains.com/issues/KT报告问题。你可以在线搜索一种方法来增加kotlin编译器的分配内存或类似的东西。 – mfulton26