Middle
Кадом механизмҳо барои сериалкунии маълумот дар Kotlin истифода мешаванд?
sobes.tech AI
Ҷавоб аз AI
Дар Kotlin барои сериализатсияи маълумотҳо механизмҳои асосӣ истифода мешаванд:
-
Китобхонаи 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) } -
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) } -
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) } -
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 дар вазифаҳои махсус ва баландсуръат истифода мешавад.