Mobil ishlanmada ma'lumotlarni serializatsiya qilish — bu nima, formatlar va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-03-08 O'qish vaqti: 8 daq

Serializatsiya — ob'ekt yoki ma'lumotlar strukturasini tarmoq orqali uzatish yoki faylga saqlash uchun mos keladigan ketma-ket formatga aylantirish jarayoni. Teskari jarayon, deserializatsiya, ma'lumotlarni asl holatiga qaytaradi. MDN Web Docs ma'lumotlariga ko'ra, serializatsiya har qanday jarayonlararo aloqa uchun zarur. Serializatsiya REST API, keshlash va ilova komponentlari o'rtasida ma'lumot almashish asosida yotadi.

Asosiy fikrlar

  • Serializatsiya — ob'ektni uzatish yoki saqlash uchun ma'lumotlar oqimiga aylantirish
  • JSON — REST API va veb aloqa uchun asosiy matn formati
  • Protobuf — maksimal unumdorlik va ixchamlikka ega ikkilik format
  • XML — Enterprise va Android ishlanmasi uchun validatsiyali qat'iy format
  • Format tanlash unumdorlik va moslik talablariga bog'liq

Serializatsiya nima?

Serializatsiya — operativ xotiradagi ob'ektni tarmoq orqali uzatish, faylga saqlash yoki boshqa jarayonga jo'natish mumkin bo'lgan chiziqli bayt yoki belgilar ketma-ketligiga aylantirish jarayoni. Serializatsiyasiz tarmoq aloqasi, holatni saqlash va jarayonlararo aloqa mumkin emas.

Serializatsiya ikkita qarama-qarshi jarayonni o'z ichiga oladi. To'g'ri jarayon (serializatsiya) ma'lumotlarni uzatish uchun formatga joylaydi. Teskari jarayon (deserializatsiya) ma'lumotlarni qaytadan ob'ektga tiklaydi. Deserializatsiya xavfsizlik uchun muhim: noto'g'ri kiritilgan ma'lumotlar ilovada zaifliklarga olib kelishi mumkin.

Mobil ilovalarni ishlab chiqishda serializatsiya hamma joyda qo'llaniladi: serverga so'rovlar yuborish va javoblarni qayta ishlash, ekran aylantirilganda ilova holatini saqlash, diskdagi ma'lumotlarni keshlash va Intent (Android) yoki Segue (iOS) orqali ekranlar o'rtasida ma'lumot uzatish.

Serializatsiyaning asosiy vazifalari

  • Tarmoq aloqasi — mijoz va server o'rtasida ma'lumot uzatish
  • Holatni saqlash — ilova ma'lumotlarini saqlash va tiklash
  • Keshlash — oflayn kirish uchun so'rov natijalarini saqlash
  • Platformalararo — turli tillardagi tizimlar o'rtasida ma'lumot almashish
  • Loglash — ob'ektlarni jurnallarga yozish uchun serializatsiya qilish

Asosiy serializatsiya formatlari

Serializatsiya formatlari matn va ikkilikka bo'linadi. Matn formatlari (JSON, XML) odam tomonidan o'qilishi mumkin va ko'rish uchun vositalar talab qilmaydi. Ikkilik formatlar (Protobuf, FlatBuffers, MessagePack) ixchamroq va tezroq, ammo deserializatsiyasiz o'qib bo'lmaydi. Format tanlash unumdorlik va disk raskadrovka qulayligi o'rtasidagi kelishuvdir.

JSON, XML va Protobufdan tashqari, ixtisoslashtirilgan formatlar ham mavjud: Google'dan FlatBuffers o'yinlar va AR uchun, MessagePack — JSON ning ixcham ikkilik analogi, Apache'dan Avro Kafkadagi katta ma'lumotlar uchun, YAML — sharhlarni qo'llab-quvvatlovchi konfiguratsiya formati.

Format Tur Sxema Hajm Tezlik
JSON Matn Ixtiyoriy O'rta O'rta
XML Matn XSD Katta Past
Protobuf Ikkilik Majburiy Kichik Yuqori
FlatBuffers Ikkilik Majburiy Kichik Maksimal
MessagePack Ikkilik Yo'q Kichik Yuqori
Avro Ikkilik JSON Schema Kichik Yuqori

Mobil ishlanmada serializatsiya

Serializatsiya mobil platformalarda o'ziga xos xususiyatlarga ega: cheklangan trafik, zaif protsessorlar va ekran aylantirilganda holatni saqlash zarurati. Androidda Gson, Moshi, Kotlinx Serialization ishlatiladi. iOSda — Codable, JSONSerialization, PropertyListEncoder. Kutubxonani to'g'ri tanlash ilova unumdorligiga jiddiy ta'sir qiladi.

Kotlinx Serialization — JetBrains'dan Kotlin Multiplatform Mobile uchun zamonaviy kutubxona. JSON, Protobuf, CBOR va moslashtirilgan formatlarni qo'llab-quvvatlaydi. Kod yaratish Kotlin Serialization plagini orqali kompilyatsiya bosqichida amalga oshiriladi, bu reflektsiyasiz yuqori unumdorlikni ta'minlaydi.

Kotlinx Serialization (Kotlin Multiplatform)

Kotlinx Serialization kutubxonasi sinflar uchun @Serializable annotatsiyasidan va serializatorlarni yaratish uchun kompilyator plaginidan foydalanadi. Bu yuqori unumdorlik va tip xavfsizligini ta'minlaydi. Standart format JSON, ammo qo'shimcha modullar orqali boshqa formatlar ham qo'llab-quvvatlanadi.

kotlin
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString

@Serializable
data class Project(
    val id: Int,
    val name: String,
    val platforms: List<String>,
    val active: Boolean
)

val json = Json {
    prettyPrint = true
    ignoreUnknownKeys = true
    encodeDefaults = true
}

fun main() {
    val project = Project(1, "MobileApp",
        listOf("Android", "iOS"), true)

    // Seriyalash
    val jsonString = json.encodeToString(project)

    // Deserializatsiya
    val restored = json.decodeFromString<Project>(jsonString)
}

iOS'da Codable (Swift)

Codable protokoli — Swift'da o'rnatilgan serializatsiya mexanizmi. U Encodable (serializatsiya) va Decodable (deserializatsiya) protokollarini birlashtiradi. JSONEncoder va JSONDecoder avtomatik ravishda ichma-ich tuzilmalar, massivlar, ixtiyoriy qiymatlar va CodingKeys orqali maxsus kalitlarni qayta ishlaydi.

swift
import Foundation

struct AppConfig: Codable {
    let appName: String
    let version: String
    let features: [String]
    let isProduction: Bool
}

let config = AppConfig(
    appName: "MyApp",
    version: "2.1.0",
    features: ["push", "analytics", "offline"],
    isProduction: true
)

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]

guard let data = try? encoder.encode(config) else { return }
let jsonString = String(data: data, encoding: .utf8)

Unumdorlik va formatlarni solishtirish

Unumdorlik serializatsiya formatlari uchta ko'rsatkich bo'yicha baholanadi: xabar hajmi, serializatsiya tezligi va deserializatsiya tezligi. Mobil ilovalar uchun uchalasi ham muhim: hajm trafik va yuklanish vaqtiga, tezlik interfeysning sezgirligi va ilovani ishga tushirish vaqtiga ta'sir qiladi.

Protobuf va FlatBuffers ikkilik ko'rinish tufayli eng yaxshi natijalarni ko'rsatadi. FlatBuffers alohida deserializatsiya bosqichini talab qilmasligi bilan ajralib turadi — ma'lumotlar to'g'ridan-to'g'ri ikkilik buferdan o'qiladi, bu minimal kechikish talab qiladigan o'yinlar va AR ilovalari uchun idealdir. JSON, pastroq unumdorlikka qaramay, soddaligi va universalligi tufayli REST API uchun eng mashhur format bo'lib qolmoqda.

Ssenariy Tavsiya etilgan format Sabab
REST API JSON Universallik, o'qiluvchanlik, qo'llab-quvvatlash
Mikrosxizmatlar Protobuf Ixchamlik, tezlik, gRPC
O'yinlar / AR FlatBuffers Zero-copy, minimal kechikish
Big Data Avro Kafka va Hadoop bilan moslik
Konfiguratsiya YAML Sharhlar, o'qiluvchanlik
Android layouts XML Platforma standarti

Qiyosiy testlar

1000 ta foydalanuvchi ob'ektlaridan iborat to'plamda amaliy testlar ko'rsatadi: Protobuf 12 KB hajmdagi xabarlarni yaratadi (JSON — 85 KB, XML — 120 KB). Serializatsiya vaqti: Protobuf — 2 ms, JSON — 8 ms, XML — 25 ms. Bu raqamlar ikkilik formatlarni yuqori yuklangan tizimlar va cheklangan trafikli mobil ilovalar uchun afzal qiladi.

Ma'lumotlarni serializatsiya qilish misollari

Misollar bir xil ob'ektning turli formatlarda serializatsiyasini namoyish etadi. Bu hajm va o'qiluvchanlikni vizual ravishda solishtirishga yordam beradi. Xuddi shu User ob'ekti JSON, XML va Protobuf'da serializatsiya qilinadi — JSON XML'dan ixchamroq, Protobuf esa eng ixcham va bir vaqtning o'zida o'qib bo'lmaydigan ekanligi aniq ko'rinadi.

Uch formatda bitta ob'ekt

JSON — minimal sintaksis, kalitlar qo'shtirnoq ichida, har xil turdagi qiymatlar. 80 belgidan iborat. O'qiluvchanligi yuqori, vizual tuzilishi aniq. Ishlab chiqish va disk raskadrovka tezligi muhim bo'lgan API uchun mos keladi.

XML — har bir element ochilish va yopilish teglariga o'ralgan. 150 belgidan iborat. O'qiluvchanligi o'rtacha, tuzilishi qat'iy. Hujjat aylanishi va XSD orqali validatsiya talab qiladigan tizimlar uchun mos keladi.

Protobuf — ikkilik, bu ma'lumotlar uchun 32 bayt. O'qib bo'lmaydi — ko'rish uchun deserializatsiya talab qiladi. Minimal hajmi uni yuqori yuklangan tizimlar va mobil ilovalar uchun ideal qiladi.

json
{
  "id": 42,
  "name": "IT Sectr",
  "email": "team@itsectr.com",
  "role": "admin",
  "active": true
}
xml
<user>
    <id>42</id>
    <name>IT Sectr</name>
    <email>team@itsectr.com</email>
    <role>admin</role>
    <active>true</active>
</user>

Serializatsiyaning eng yaxshi amaliyotlari

Eng yaxshi amaliyotlar odatiy xatolardan qochish va loyiha uchun to'g'ri serializatsiya strategiyasini tanlashga yordam beradi. Ushbu tavsiyalarga rioya qilish unumdorlik, xavfsizlik va kodning barqarorligini yaxshilaydi.

Mobil ishlanma uchun tavsiyalar

  1. Formatni ssenariyga qarab tanlang — REST API uchun JSON, gRPC va mikrosxizmatlar uchun Protobuf
  2. Java Serializable'dan qoching — sekin va xavfli mexanizm, Kotlinx Serialization yoki Moshi'ni ishlating
  3. Noma'lum kalitlarni e'tiborsiz qoldiring — parserni modelda mavjud bo'lmagan maydonlarni o'tkazib yuborishga sozlang
  4. Deserializatsiya qilingan ma'lumotlarni keshlang — bir xil ma'lumotlarni qayta-qayta tahlil qilishdan qoching
  5. Kirish ma'lumotlarini tekshiring — deserializatsiya paytida chegaralar va turlarni tekshiring

Xavfsizlik va serializatsiya

Serializatsiya xavfsizligi — ayniqsa ishonchsiz manbalardan ma'lumotlarni deserializatsiya qilishda juda muhim jihat. Deserializatsiyaga hujumlar masofaviy kod bajarilishiga (RCE) olib kelishi mumkin, bu veb va mobil ilovalardagi eng xavfli zaifliklardan biridir. Eng mashhur holatlar Java Serializable va Python pickle bilan bog'liq.

Protobuf va JSON bunday hujumlardan o'rnatilgan himoyaga ega, chunki ular faqat ma'lumotlar bilan ishlaydi, ixtiyoriy ob'ektlar bilan emas. Java Serializable esa, aksincha, classpath'da mavjud bo'lgan har qanday sinfni tiklashi mumkin, bu uni tashqi manbalardan ma'lumot qabul qilish uchun xavfli qiladi. Androidda standart Java Serialization o'rniga Kotlinx Serialization yoki Moshi'dan foydalanish tavsiya etiladi.

Qo'shimcha xavfsizlik choralari: kirish ma'lumotlari hajmiga cheklov qo'ying, deserializatsiyadan oldin sxemani tekshiring, HTTP sarlavhalaridagi Content-Type'ga ishonmang, ruxsat etilgan sinflar uchun allowlist'dan foydalaning. Serializatsiya kutubxonalarini muntazam yangilang, chunki ulardagi zaifliklar vaqti-vaqti bilan aniqlanadi va tuzatiladi.

Tez-tez beriladigan savollar

Serializatsiya va marshalling o'rtasidagi farq nima?

Serializatsiya ob'ektni baytlar ketma-ketligiga aylantiradi, marshalling (marshalling) ma'lumotlarni turlari va tuzilishini saqlagan holda turli manzil fazolari o'rtasida uzatadi. Marshalling serializatsiyani jarayonning bir qismi sifatida o'z ichiga oladi, ammo shuningdek havolalarni kodlash va xotira boshqaruvini ham o'z ichiga olishi mumkin.

Qaysi serializatsiya formati eng tez?

Google'dan FlatBuffers zero-copy deserializatsiyasi tufayli maksimal tezlikni ta'minlaydi — ma'lumotlar o'zgartirilmasdan to'g'ridan-to'g'ri ikkilik buferdan o'qiladi. Protobuf ikkinchi, JSON uchinchi o'rinda. XML tarqalgan formatlar orasida eng sekinidir.

Android uchun nimani tanlash kerak: Gson, Moshi yoki Kotlinx Serialization?

Kotlinx Serialization Kotlin'dagi yangi loyihalar uchun eng yaxshi tanlov: kompilyatorda yaratish, Kotlin Multiplatform qo'llab-quvvatlashi, null safety. Moshi Java loyihalari uchun yaxshi tanlov, Gson'dan unumliroq. Gson boshlash uchun eng oddiy kutubxona, ammo sekinroq va refleksiyadan foydalanadi.

Tsiklik havolalarga ega ob'ektni qanday serializatsiya qilish kerak?

Tsiklik havolalar serializatsiyada cheksiz rekursiyaga olib keladi. Yechimlar: ob'ektlarga to'g'ridan-to'g'ri havolalar o'rniga ID havolalaridan foydalaning, maxsus serializatsiya adapterlarini qo'llang (masalan, Jacksondagi @JsonIgnore) yoki tsikllarni bartaraf etish uchun ma'lumotlar modelini qayta loyihalashtiring.

Serializatsiya ilova xavfsizligiga ta'sir qiladimi?

Ha, ayniqsa ishonchsiz manbalardan ma'lumotlarni deserializatsiya qilish. Deserializatsiya zaifliklari masofaviy kod bajarilishiga olib kelishi mumkin. Tavsiyalar: ishonchsiz manbalardan ma'lumotlarni deserializatsiya qilmang, deserializatsiya paytida sinf allowlistidan foydalaning va qayta ishlashdan oldin ma'lumotlar sxemasini tekshiring.

Xulosa

  • Serializatsiya ob'ektlarni uzatish va saqlash uchun ma'lumotlar oqimiga aylantiradi, deserializatsiya ularni tiklaydi
  • JSON — REST API standarti, XML — hujjat aylanishi uchun, Protobuf — mikrosxizmatlar va yuqori yuk uchun
  • Ikkilik formatlar (Protobuf, FlatBuffers) matn formatlaridan 3-10 marta ixcham va tez
  • Androidda Kotlinx Serialization, iOS'da o'rnatilgan Codable tavsiya etiladi
  • Keshlash deserializatsiya qilingan ma'lumotlar protsessor yukini kamaytiradi va ilovani tezlashtiradi
  • Xavfsizlik deserializatsiya uchun muhim — kirish ma'lumotlarini tekshiring va allowlist'dan foydalaning
  • Format tanlash o'qiluvchanlik, unumdorlik va moslik o'rtasidagi kelishuvdir

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing