繁体   English   中英

String属性可以在Kotlin中使用多长时间?

[英]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目录中,并以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() }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM