Mobil ishlanmada ma'lumotlar serializatsiyasi: mohiyati, formatlari va qanday ishlaydi

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

Serializatsiya va deserializatsiya — ob'ektlarni uzatish yoki saqlash uchun formatga aylantirishning asosiy jarayonlari. Mobil ishlanmada bu mexanizmlar har bir tarmoq so'rovida, holatni saqlashda va jarayonlararo aloqada qo'llaniladi. MDN Web Docs, 2024 ma'lumotlariga ko'ra, JSON eng mashhur format bo'lib qolmoqda veb va mobil ilovalarda serializatsiya uchun, XML va Protocol Buffers-ni ortda qoldirib.

Asosiy

  • Serializatsiya — ob'ektni uzatish yoki saqlash uchun bayt ketma-ketligiga aylantirish
  • Deserializatsiya — ob'ektni bayt ko'rinishidan tiklashning teskari jarayoni
  • JSON — inson o'qiy oladigan va barcha platformalar tomonidan qo'llab-quvvatlanadigan matn formati
  • Protocol Buffers — yuqori tezlik va ixcham o'lchamga ega Google-ning ikkilik formati
  • XML — validatsiya sxemalari va nom fazolarini qo'llab-quvvatlaydigan kengaytiriladigan belgilash tili

Serializatsiya va deserializatsiyaning mohiyati

Serializatsiya — bu ilova ob'ektini tarmoq orqali uzatish yoki diskda saqlash uchun yaroqli formatga aylantirish jarayoni. Deserializatsiya teskari aylantirishni amalga oshiradi, olingan ma'lumotlardan ob'ektni tiklaydi. Mobil ishlanmada serializatsiya API so'rovlarida, ekran holatini saqlashda, keshlashda va Intent yoki Bundle orqali ma'lumot uzatishda qo'llaniladi.

Qachon ehtiyoj tug'iladi

Ilova komponentlari yoki ilova va server o'rtasidagi har bir o'zaro aloqa serializatsiyani talab qiladi. REST API ma'lumotlarni JSON yoki XML da uzatadi, gRPC Protocol Buffers-dan foydalanadi, Android-da jarayon ichidagi aloqa esa Parcelable-ni qo'llaydi. Serializatsiyasiz murakkab ob'ektni jarayon chegarasidan o'tkazish yoki uni ma'lumotlar bazasida saqlash mumkin emas.

kotlin
// Serializatsiyaning umumiy prinsipi
data class User(
    val id: Int,
    val name: String,
    val email: String
)

// Serializatsiya: ob'ekt -> JSON
fun serializeUser(user: User): String {
    return """{"id":${user.id},"name":"${user.name}","email":"${user.email}"}"""
}

// Deserializatsiya: JSON -> ob'ekt
fun deserializeUser(json: String): User? {
    // JSON-ni ob'ektga pars qilish
    return Gson().fromJson(json, User::class.java)
}
FormatO'lchamTezlikO'qish qulayligiTipizatsiya
JSONo'rtayuqoriyuqoridinamik
XMLkattao'rtayuqoriXSD sxemasi
Protocol Bufferskichikjuda yuqoripastqat'iy .proto
FlatBufferskichikmaksimalpastqat'iy .fbs

JSON — mobil ishlanmaning asosiy formati

JSON (JavaScript Object Notation) — JavaScript ob'ektlari sintaksisiga asoslangan yengil matn formati. JSON satrlar, raqamlar, mantiqiy qiymatlar, massivlar va ichma-ich ob'ektlarni qo'llab-quvvatlaydi, bu mobil ilovalarda ma'lumot uzatishning aksariyat ssenariylarini qamrab oladi. Format platformadan mustaqil: har bir ekotizim uni pars qilish uchun o'rnatilgan vositalarni taqdim etadi.

JSON-ning alternativlarga nisbatan afzalliklari

JSON soddaligi va universalligi tufayli g'alaba qozonadi. Dasturchiga asosiy foydalanish uchun sxema kerak emas — struktura pars qilish paytida dinamik ravishda aniqlanadi. Formatning o'qish qulayligi disk raskadrovka va test qilishni soddalashtiradi: server javobini istalgan dasturchi vositasida ko'rish mumkin. Ikkala mobil platformada ham JSON uchinchi tomon kutubxonalarisiz native tarzda qayta ishlanadi.

swift
// Codable — Swift-da native JSON serializatsiyasi
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

let jsonString = """{"id":1,"name":"John","email":"john@test.com"}"""
let jsonData = Data(jsonString.utf8)
let decoder = JSONDecoder()
let user = try! decoder.decode(User.self, from: jsonData)

Google-dan Protocol Buffers

Protocol Buffers (protobuf) — yuqori samaradorlik tizimlari uchun Google tomonidan ishlab chiqilgan ikkilik serializatsiya formati. JSON-dan farqli o'laroq, protobuf .proto faylida sxemani oldindan belgilashni talab qiladi, lekin sezilarli darajada kichikroq ma'lumot hajmi va yuqoriroq qayta ishlash tezligini ta'minlaydi. Format gRPC, Firebase Firestore va Google-ning ichki xizmatlarida qo'llaniladi.

.proto faylining tuzilishi

Protobuf sxemasi har biri noyob raqamga ega tiplangan maydonlari bo'lgan xabarlarni tavsiflaydi. Protoc kompilyatori kerakli tilda sinflarni yaratadi, ular serializatsiya va deserializatsiyani avtomatik ravishda bajaradi. Protobuf maydonlarni qo'shish va olib tashlash qoidalari orqali orqaga moslikni yo'qotmasdan sxema evolyutsiyasini qo'llab-quvvatlaydi.

cpp
// user.proto-da sxemani belgilash
syntax = "proto3";

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
  repeated string roles = 4;
}

// Kotlin-da yaratilgan kod
val user = UserProto.User.newBuilder()
    .setId(1)
    .setName("John")
    .setEmail("john@test.com")
    .build()

val bytes: ByteArray = user.toByteArray()

XML va uning qo'llanilishi

XML (eXtensible Markup Language) — qat'iy tuzilishga, nom fazolarini qo'llab-quvvatlashga va XSD sxemalari orqali validatsiyaga ega format. XML ixchamlik va pars qilish tezligi bo'yicha JSON-dan orqada qoladi, lekin Android ishlanmasida layout fayllari, AndroidManifest, resurslar va Gradle konfiguratsiyalari uchun talab qilinadi. iOS-da XML plist fayllarida va ba'zi eski xizmatlarda qo'llaniladi.

Android-da XML-ni pars qilish

Android XML-ni pars qilish uchun uchta usulni taklif qiladi: DOM (butun hujjatni xotiraga yuklash), SAX (hodisaga yo'naltirilgan oqimli pars qilish) va XmlPullParser (gibrid yondashuv). XmlPullParser — mobil qurilmalar uchun tavsiya etilgan variant, chunki u cheklangan xotira bilan samarali ishlaydi va hujjatni o'qish bilan birga qayta ishlash imkonini beradi.

kotlin
// Android-da XmlPullParser
fun parseUserXml(inputStream: InputStream): User? {
    val parser = Xml.newPullParser()
    parser.setInput(inputStream, Xml.Encoding.UTF_8.name)

    var id: Int? = null
    var name: String? = null
    var email: String? = null

    while (parser.next() != XmlPullParser.END_DOCUMENT) {
        if (parser.eventType == XmlPullParser.START_TAG
            && parser.name == "email") {
            email = parser.nextText()
        }
    }
    return User(id!!, name!!, email!!)
}

iOS va Android-da serializatsiya

Har bir platforma serializatsiya uchun o'z vositalarini taklif qiladi. iOS-da asosiy mexanizm JSONEncoder va JSONDecoder bilan Codable protokoli, Objective-C uchun esa NSJSONSerialization. Android Gson, Moshi va kotlinx.serialization kutubxonalaridan foydalanadi. Jarayonlararo ma'lumot uzatish uchun Android Parcelable, iOS esa NSKeyedArchiver qo'llaydi. Kotlin loyihalari tobora ko'proq kotlinx.serialization — JetBrains-ning yechimini tanlaydi, bu ko'p platformalilikni qo'llab-quvvatlaydi va refleksiyaga bog'liq emas, Kotlin kompilyator plagini orqali kompilyatsiya bosqichida serializatorlar yaratadi.

Android-da Parcelable vs Serializable

Android Intent va Bundle uchun ikkita serializatsiya mexanizmini qo'llab-quvvatlaydi. Serializable — refleksiyadan foydalanadigan standart Java mexanizmi, bu past samaradorlikka olib keladi. Parcelable — Android-ga xos protokol, writeToParcel va createFromParcel metodlarini qo'lda amalga oshirishni talab qiladi, lekin baytlar bilan to'g'ridan-to'g'ri manipulyatsiya tufayli o'nlab marta tezroq ishlaydi.

kotlin
// Android-da Parcelable
@Parcelize
data class UserParcel(
    val id: Int,
    val name: String,
    val email: String
) : Parcelable

// Intent orqali uzatish
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("user", userParcel)
startActivity(intent)

iOS-da kontrollerlar o'rtasida ma'lumot uzatish uchun Codable oldindan Data-ga serializatsiya bilan, jarayonlararo aloqa uchun esa NSKeyedArchiver ishlatiladi, u ob'ektlarni Property List ikkilik formatiga aylantiradi. SwiftUI-dagi zamonaviy loyihalar ilova modullari o'rtasida uzatish uchun ma'lumotlarni JSONEncoder orqali kodlashni afzal ko'radi.

Serializatsiyada xavfsizlik

Ishonchsiz ma'lumotlarning noto'g'ri deserializatsiyasi zaifliklarga olib kelishi mumkin. Serializatsiya orqali hujumlar Java-da readObject metodining o'zgartirilishidan yoki uchinchi tomon kutubxonalarining xavfli deserializatorlaridan foydalanadi. Android-da ishonchsiz manbalardan olingan ma'lumotlar uchun Serializable-dan qochish, uning o'rniga Parcelable yoki deserializatsiyadan keyin barcha maydonlarni qo'lda tekshirish tavsiya etiladi. iOS-da JSONDecoder sukut bo'yicha turlarga nisbatan qat'iy, lekin JSONSerialization bilan ishlaganda dasturchi shartli aylantirish orqali turlarni tekshirishi kerak.

Loyiha uchun format tanlash

Serializatsiya formatini tanlashda samaradorlik talablari, ma'lumot hajmi va moslik hisobga olinadi. REST API va mikroxizmat arxitekturasi uchun optimal tanlov JSON bo'lib qolmoqda — u barcha platformalar va tillar tomonidan qo'llab-quvvatlanadi. Yuqori yuklangan tizimlar va cheklangan trafikli mobil ilovalar uchun Protocol Buffers afzalroq, ular kichikroq hajm va tezroq deserializatsiyani ta'minlaydi. XML faqat konfiguratsiya ssenariylarida va eski tizimlar bilan integratsiyada asoslanadi. Zamonaviy loyihalarda FlatBuffers ham ommalashmoqda — deserializatsiya bosqichisiz ikkilik format, o'yin dvigatellarida va minimal kechikishli ilovalarda qo'llaniladi. Har bir format o'z o'rniga ega va to'g'ri tanlov bevosita ilovaning ishlash tezligi va iste'mol qilinadigan trafik hajmiga ta'sir qiladi.

Tez-tez beriladigan savollar

Oddiy so'zlar bilan serializatsiya nima?

Serializatsiya — bu ilova ob'ektini tarmoq orqali yuborish yoki faylda saqlash mumkin bo'lgan formatga yig'ish. Tasavvur qiling, bir buyumning suratini olyapsiz — surat serializatsiya, buyumning suratdan tiklanishi esa deserializatsiya.

JSON Protocol Buffers-dan nima bilan farq qiladi?

JSON — inson o'qiy oladigan va sxema talab qilmaydigan matn formati. Protocol Buffers — majburiy sxemali (.proto), sezilarli darajada kichik hajmli va yuqori tezlikli ikkilik format. Protobuf yuqori yuklangan tizimlar uchun tanlanadi, JSON — universal moslik uchun.

Qachon JSON o'rniga XML ishlatiladi?

XML konfiguratsiya fayllari (AndroidManifest, layout resurslari), murakkab ichma-ich hujjatlar va XSD orqali qat'iy validatsiyali tizimlar uchun standart bo'lib qolmoqda. XML shuningdek SOAP protokollari va nom fazolarini qo'llab-quvvatlash talab qilinadigan eski tizimlarda qo'llaniladi.

Swift-da Codable nima?

Codable — avtomatik serializatsiya va deserializatsiya uchun Encodable va Decodable-ni birlashtiruvchi Swift protokoli. Kompilyator struktura yoki sinfning barcha xususiyatlari uchun encode(to:) va init(from:) metodlarining amalga oshirilishini yaratadi.

Qaysi biri tezroq: Parcelable yoki Serializable?

Parcelable Serializable-dan sezilarli darajada tezroq ishlaydi, chunki refleksiyadan foydalanmaydi va maydonlarni to'g'ridan-to'g'ri bayt oqimiga yozadi. Zamonaviy qurilmalarda farq Parcelable foydasiga 10 baravargacha tezlashishga yetishi mumkin.

Xulosa

  • Serializatsiya — ob'ektni uzatish uchun formatga aylantirish, deserializatsiya — teskari tiklash
  • JSON — REST API va mobil ilovalarda qo'llaniladigan universal matn formati
  • Protocol Buffers — qat'iy sxemali yuqori samaradorlik ssenariylari uchun Google-ning ikkilik formati
  • XML — XSD orqali validatsiyali format, konfiguratsiyalar va eski tizimlarda qo'llaniladi
  • Parcelable (Android) va Codable (iOS) — komponentlar o'rtasida ma'lumot uzatish uchun platforma mexanizmlari
  • Serializatsiya xavfsizligi muhim: ishonchsiz ma'lumotlar deserializatsiyada zaifliklarga olib kelishi mumkin

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