[英]How long String property can be in 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() }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.