Middle
Kotlin'da ma'lumotlarni seriyalash uchun qanday mexanizmlar ishlatiladi?
sobes.tech AI
AIdan javob
Kotlinda ma'lumotlarni seriyalash uchun quyidagi asosiy mexanizmlar ishlatiladi:
-
kotlinx.serialization kutubxonasi:
- JetBrains tomonidan rasmiy, ko‘p platformali kutubxona.
- Turli formatlarni qo‘llab-quvvatlaydi: JSON, Protobuf, CBOR, YAML.
- Annotations va kompilator plaginiga asoslangan bo‘lib, bu seriyalash kodini kompilatsiya vaqtida yaratishga imkon beradi.
- Ma'lumotlar sinflarini avtomatik seriyalashni ta'minlaydi.
Foydalanish misoli:
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 ga seriyalash println(jsonString) val decodedUser = Json.decodeFromString(User.serializer(), jsonString) // JSON dan deserializatsiya println(decodedUser) } -
Jackson:
- Java uchun juda mashhur kutubxona, Kotlin bilan keng qo‘llaniladi.
- Kotlin-ga xos konstruktsiyalarni qo‘llab-quvvatlash uchun
jackson-module-kotlinmodulini qo‘shish talab etiladi. - Ko‘plab formatlarni qo‘llab-quvvatlaydi: JSON, XML, YAML va boshqalar.
- Refleksiya asosida ishlaydi.
Kotlin-modul bilan foydalanish misoli:
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 ga seriyalash println(jsonString) val decodedProduct = mapper.readValue<Product>(jsonString) // JSON dan deserializatsiya println(decodedProduct) } -
Gson:
- Google kutubxonasi.
- Android dasturlashda keng qo‘llaniladi.
- Refleksiya asosida ishlaydi.
- Faqat JSON ni qo‘llab-quvvatlaydi.
- Koleksiyalar yoki generiklar uchun turlarni aniq ko‘rsatish talab qilinishi mumkin.
Foydalanish misoli:
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 ga seriyalash println(jsonString) val decodedItem = gson.fromJson(jsonString, Item::class.java) // JSON dan deserializatsiya println(decodedItem) } -
Kryo:
- Barcha obyektlarni binar seriyalash uchun yuqori samarali framework.
- Kesh qilish yoki tarmoq aloqalarida yuqori ishlash uchun ishlatiladi, seriyalash hajmi va tezligi muhim bo‘lsa.
- Klasslarni ro‘yxatga olish talab qilinishi mumkin.
Misol (kontseptual, sozlash bilan to‘liq bo‘lmagan kod):
// Kryo konsepsiyasiga asoslangan misol 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) // Klassni ro‘yxatga olish val event = Event(42, System.currentTimeMillis(), "Nima bo‘ldi!") // Faylga seriyalash Output(FileOutputStream("event.bin")).use { output -> kryo.writeObject(output, event) } // Fayldan deserializatsiya Input(FileInputStream("event.bin")).use { input -> val decodedEvent = kryo.readObject(input, Event::class.java) println(decodedEvent) } }
Tanlov loyiha talablariga bog‘liq: ko‘p platformali, ma'lumotlar formatlari, ishlash tezligi, kutubxonalar hajmi va qulayligi. kotlinx.serialization yangi Kotlin loyihalari uchun, ayniqsa ko‘p platformali bo‘lsa, tavsiya etiladi. Jackson va Gson mavjud Java ekotizimlariga integratsiya qilishda mashhur qolmoqda. Kryo esa maxsus, yuqori ishlash talab qiladigan vazifalarda ishlatiladi.