Sobes.tech
Middle

Кадом механизмҳо барои сериалкунии маълумот дар Kotlin истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin барои сериализатсияи маълумотҳо механизмҳои асосӣ истифода мешаванд:

  1. Китобхонаи kotlinx.serialization:

    • Китобхонаи расмии кросс-платформавии JetBrains.
    • Форматҳои гуногунро дастгирӣ мекунад: JSON, Protobuf, CBOR, YAML.
    • Бар асоси анотацияҳо ва плагин барои компилятор, ки имкон медиҳад, ки коди сериализатсия дар вақти компиляция тавлид шавад.
    • Сериализатсияи автоматии синфҳои маълумотро таъмин мекунад.

    Мисоли истифода:

    import kotlinx.serialization.Serializable
    import kotlinx.serialization.json.Json
    
    @Serializable
    data class User(val name: String, val age: Int)
    
    fun main() {
        val user = User("Alice", 30)
        val jsonString = Json.encodeToString(User.serializer(), user) // Сериализатсия ба JSON
        println(jsonString)
        val decodedUser = Json.decodeFromString(User.serializer(), jsonString) // Десериализатсия аз JSON
        println(decodedUser)
    }
    
  2. Jackson:

    • Китобхонаи маъруфи Java, ки бо Kotlin васеъ истифода мешавад.
    • Барои дастгирии сохторҳои махсуси Kotlin, ба монанди сериализатсияи синфҳои маълумот бо параметрҳои пешфарз, модул jackson-module-kotlin илова кардан лозим аст.
    • Форматҳои зиёдеро дастгирӣ мекунад: JSON, XML, YAML ва дигарҳо.
    • Бар асоси рефлексия кор мекунад.

    Мисоли истифода бо модул барои Kotlin:

    import com.fasterxml.jackson.annotation.JsonProperty
    import com.fasterxml.jackson.databind.ObjectMapper
    import com.fasterxml.jackson.module.kotlin.KotlinModule
    import com.fasterxml.jackson.module.kotlin.readValue
    
    data class Product(
        @JsonProperty("id") val id: Int,
        @JsonProperty("name") val name: String,
        @JsonProperty("price") val price: Double
    )
    
    fun main() {
        val mapper = ObjectMapper().registerModule(KotlinModule())
        val product = Product(1, "Laptop", 1200.0)
        val jsonString = mapper.writeValueAsString(product) // Сериализатсия ба JSON
        println(jsonString)
        val decodedProduct = mapper.readValue<Product>(jsonString) // Десериализатсия аз JSON
        println(decodedProduct)
    }
    
  3. Gson:

    • Китобхонаи Google.
    • Ҳамчунин маъмул аст, махсусан дар таҳияи Android.
    • Бар асоси рефлексия кор мекунад.
    • Танҳо JSON-ро дастгирӣ мекунад.
    • Мумкин аст, ки барои десериализатсияи коллекияҳо ё генерикҳо намудҳои равшантарро талаб кунад.

    Мисоли истифода:

    import com.google.gson.Gson
    import com.google.gson.annotations.SerializedName
    
    data class Item(
        @SerializedName("item_id") val itemId: String,
        @SerializedName("description") val description: String
    )
    
    fun main() {
        val gson = Gson()
        val item = Item("SKU123", "Wireless Mouse")
        val jsonString = gson.toJson(item) // Сериализатсия ба JSON
        println(jsonString)
        val decodedItem = gson.fromJson(jsonString, Item::class.java) // Десериализатсия аз JSON
        println(decodedItem)
    }
    
  4. Kryo:

    • Фреймворки бо суръати баланд барои сериализатсияи бинарии объектҳо.
    • Аксар вақт барои сценарияҳои баландсуръат, масалан, кешгирӣ ё алоқаи шабакавӣ, ки андоза ва суръати сериализатсия муҳим аст, истифода мешавад.
    • Мумкин аст, ки сабт кардани синфҳоро талаб кунад.

    Мисол (концептуалӣ, на пурра, бо танзимот):

    // Мисол аз асоси консепсияи Kryo
    import com.esotericsoftware.kryo.Kryo
    import com.esotericsoftware.kryo.io.Input
    import com.esotericsoftware.kryo.io.Output
    import java.io.FileInputStream
    import java.io.FileOutputStream
    
    data class Event(val id: Int, val timestamp: Long, val message: String)
    
    fun main() {
        val kryo = Kryo()
        kryo.register(Event::class.java) // Сабт кардани синф
    
        val event = Event(42, System.currentTimeMillis(), "Баъзе чизҳо рӯй дод!")
    
        // Сериализатсия ба файл
        Output(FileOutputStream("event.bin")).use { output ->
            kryo.writeObject(output, event)
        }
    
        // Десериализатсия аз файл
        Input(FileInputStream("event.bin")).use { input ->
            val decodedEvent = kryo.readObject(input, Event::class.java)
            println(decodedEvent)
        }
    }
    

Интихоби механизм вобаста ба талаботи лоиҳа: кросс-платформавӣ, формат маълумот, суръат, андозаи китобхонаҳо ва бароҳатии истифода. kotlinx.serialization тавсия дода мешавад барои лоиҳаҳои нав дар Kotlin, махсусан кросс-платформавӣ. Jackson ва Gson боқӣ мемонанд маъмул, махсусан дар ҳамгироӣ бо системаи Java. Kryo дар вазифаҳои махсус ва баландсуръат истифода мешавад.