【问题标题】:kotlinx.serialization Json config: use singleton or build every time?kotlinx.serialization Json 配置:每次都使用单例还是构建?
【发布时间】:2021-01-27 05:35:45
【问题描述】:

我正在构建一个 Kotlin 服务器应用程序。我知道我需要一个特定的 Json 配置,例如 Json { ignoreUnknownKeys = true }

我的问题是声明一个顶级var(或者可能是一个将配置作为属性的object)并在任何地方使用它是否更有意义,或者是否在每个地方创建一个新的Json {}功能。

我想我对使用单例的担忧是在我有多个同时请求的情况下需要使用配置的情况。我对 JVM 内部结构或 kotlinx 架构知之甚少,不知道这是否是个问题。同时,在每个函数中创建新配置似乎效率很低,每次都创建新对象。

// which to choose?

// top-level val
val myJson : Json = Json { ignoreUnknownKeys = true }

// top-level object with property
object myJConfig {
  val myJson : Json = { ignoreUnknownKeys = true }
}

// create a new config within a function
class myClass {
  fun myFunc() {
    val myJson : Json = { ignoreUnknownKeys = true }
    ... rest of function here ...
  }
}

【问题讨论】:

  • 某个“事物”的多个用户没有问题。问题在于并发修改,因此只要您的任何过程都没有真正改变对象中的某些内容,单例就可以了。
  • @Alex.T 谢谢。不,不会有任何修改。如果一个请求当前正在使用解析器,我担心速度会变慢,另一个请求必须等到第一个请求完成。如果解析一个长 JSON 字符串需要 250 毫秒,我是否会限制我的服务器每秒处理超过 4 个请求?

标签: kotlin jvm singleton kotlinx.serialization


【解决方案1】:

Json 的实例是安全的(KSerializers 也是如此)。它是 EncoderDecoder 的实例,它是特定于您编码/解码的对象的上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2016-06-02
    相关资源
    最近更新 更多