Mobil inkişafda məlumatların serializasiyası: mahiyyəti, formatları və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-03-15 Oxuma vaxtı: 8 dəq

Serializasiya və deserializasiya — obyektlərin ötürülmə və ya saxlanma üçün formata çevrilməsinin fundamental prosesləridir. Mobil inkişafda bu mexanizmlər hər şəbəkə sorğusunda, vəziyyətin saxlanmasında və proseslərarası ünsiyyətdə istifadə olunur. MDN Web Docs, 2024-e görə, JSON ən məşhur format olaraq qalır veb və mobil tətbiqlərdə serializasiya üçün, XML və Protocol Buffers-ı geridə qoyaraq.

Başlıca

  • Serializasiya — obyektin ötürülmə və ya saxlanma üçün bayt ardıcıllığına çevrilməsi
  • Deserializasiya — obyektin bayt təmsilindən bərpa edilməsinin əks prosesi
  • JSON — insan tərəfindən oxuna bilən və bütün platformalar tərəfindən dəstəklənən mətn formatı
  • Protocol Buffers — yüksək sürət və yığcam ölçüdə Google-ın ikili formatı
  • XML — doğrulama sxemləri və ad fəzaları dəstəyi ilə genişləndirilə bilən işarələmə dili

Serializasiya və deserializasiyanın mahiyyəti

Serializasiya — bu tətbiq obyektinin şəbəkə üzərində ötürülmə və ya diskdə saxlanma üçün yararlı formata çevrilməsi prosesidir. Deserializasiya əks çevrilməni həyata keçirir, alınan məlumatlardan obyekti bərpa edir. Mobil inkişafda serializasiya API sorğularında, ekran vəziyyətinin saxlanmasında, keşləmədə və Intent və ya Bundle vasitəsilə məlumat ötürülməsində tətbiq olunur.

Nə vaxt ehtiyac yaranır

Tətbiq komponentləri və ya tətbiqlə server arasındakı hər bir qarşılıqlı əlaqə serializasiya tələb edir. REST API məlumatları JSON və ya XML-də ötürür, gRPC Protocol Buffers istifadə edir, Android-də prosesdaxili ünsiyyət isə Parcelable tətbiq edir. Serializasiya olmadan mürəkkəb obyekti proses sərhədindən ötürmək və ya onu verilənlər bazasında saxlamaq mümkün deyil.

kotlin
// Serializasiyanın ümumi prinsipi
data class User(
    val id: Int,
    val name: String,
    val email: String
)

// Serializasiya: obyekt -> JSON
fun serializeUser(user: User): String {
    return """{"id":${user.id},"name":"${user.name}","email":"${user.email}"}"""
}

// Deserializasiya: JSON -> obyekt
fun deserializeUser(json: String): User? {
    // JSON-un obyektə pars edilməsi
    return Gson().fromJson(json, User::class.java)
}
FormatÖlçüSürətOxunaqlılıqTipizasiya
JSONortayüksəkyüksəkdinamik
XMLböyükortayüksəkXSD sxemi
Protocol Bufferskiçikçox yüksəkaşağıciddi .proto
FlatBufferskiçikmaksimalaşağıciddi .fbs

JSON — mobil inkişafın əsas formatı

JSON (JavaScript Object Notation) — JavaScript obyektlərinin sintaksisinə əsaslanan yünül mətn formatıdır. JSON sətrlər, rəqəmlər, məntiqi dəyərlər, massivlər və iç-içə obyektləri dəstəkləyir ki, bu da mobil tətbiqlərdə məlumat ötürülməsinin əksər ssenarilərini əhatə edir. Format platformadan asılı deyil: hər ekosistem onun pars edilməsi üçün daxili vasitələr təqdim edir.

JSON-un alternativlər üzərində üstünlükləri

JSON sadəliyi və universallığı sayəsində qalib gəlir. İlkin istifadə üçün tərtibatçıya sxem lazım deyil — struktur pars etmə zamanı dinamik olaraq müəyyən edilir. Formatın oxunaqlılığı sazlama və testi asanlaşdırır: server cavabı istənilən tərtibatçı alətində görünə bilər. Hər iki mobil platformada JSON üçüncü tərəf kitabxanalarına ehtiyac olmadan native şəkildə işlənir.

swift
// Codable — Swift-də native JSON serializasiyası
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) — yüksək performanslı sistemlər üçün Google tərəfindən hazırlanmış ikili serializasiya formatıdır. JSON-dan fərqli olaraq, protobuf .proto faylında sxemin əvvəlcədən müəyyən edilməsini tələb edir, lakin əhəmiyyətli dərəcədə kiçik məlumat ölçüsü və daha yüksək emal sürəti təmin edir. Format gRPC, Firebase Firestore və Google-ın daxili xidmətlərində istifadə olunur.

.proto faylının strukturu

Protobuf sxemi hər biri unikal nömrəyə malik tipli sahələri olan mesajları təsvir edir. Protoc kompilyatoru tələb olunan dildə siniflər yaradır ki, onlar serializasiya və deserializasiyanı avtomatik yerinə yetirir. Protobuf geriyə uyğumluluğu itirmədən sahələrin əlavə edilməsi və silinməsi qaydaları vasitəsilə sxemin təkamülünü dəstəkləyir.

cpp
// user.proto-da sxemin təyini
syntax = "proto3";

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

// Kotlin-də yaradılmış kod
val user = UserProto.User.newBuilder()
    .setId(1)
    .setName("John")
    .setEmail("john@test.com")
    .build()

val bytes: ByteArray = user.toByteArray()

XML və onun tətbiqi

XML (eXtensible Markup Language) — ciddi strukturu, ad fəzaları dəstəyi və XSD sxemləri vasitəsilə doğrulaması olan formatdır. XML JSON-dan yığcamlıq və pars etmə sürəti baxımından geri qalır, lakin Android inkişafında layout faylları, AndroidManifest, resurslar və Gradle konfiqurasiyaları üçün tələb olunur. iOS-da XML plist fayllarında və bəzi köhnə xidmətlərdə istifadə olunur.

Android-də XML-in pars edilməsi

Android XML-in pars edilməsi üçün üç üsul təqdim edir: DOM (bütün sənədin yaddaşa yüklənməsi), SAX (hadisə yönümlü axın pars etmə) və XmlPullParser (hibrid yanaşma). XmlPullParser — mobil cihazlar üçün tövsiyə olunan seçimdir, çünki məhdud yaddaşla səmərəli işləyir və sənədi oxunduqca emal etməyə imkan verir.

kotlin
// Android-də 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 və Android-də serializasiya

Hər platforma serializasiya üçün öz alətlərini təklif edir. iOS-da əsas mexanizm JSONEncoder və JSONDecoder ilə Codable protokoludur, Objective-C üçün isə NSJSONSerialization. Android Gson, Moshi və kotlinx.serialization kitabxanalarından istifadə edir. Proseslərarası məlumat ötürülməsi üçün Android Parcelable, iOS isə NSKeyedArchiver tətbiq edir. Kotlin layihələri getdikcə daha çox kotlinx.serialization — JetBrains-in həllini seçir, bu da çoxplatformalılığı dəstəkləyir və refleksiyadan asılı deyil, Kotlin kompilyator plugin-i vasitəsilə kompilyasiya mərhələsində serializatorlar yaradır.

Android-də Parcelable vs Serializable

Android Intent və Bundle üçün iki serializasiya mexanizmini dəstəkləyir. Serializable — refleksiyadan istifadə edən standart Java mexanizmidir, bu da aşağı performansa səbəb olur. Parcelable — Android-ə xas protokoldur, writeToParcel və createFromParcel metodlarının əl ilə tətbiqini tələb edir, lakin baytlarla birbaşa manipulyasiya sayəsində onlarla dəfə daha sürətli işləyir.

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

// Intent vasitəsilə ötürülmə
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("user", userParcel)
startActivity(intent)

iOS-da kontrollerlər arasında məlumat ötürmək üçün Codable əvvəlcə Data-ya serializasiya ilə, proseslərarası ünsiyyət üçün isə NSKeyedArchiver istifadə olunur ki, o da obyektləri Property List ikili formatına çevirir. SwiftUI-də müasir layihələr tətbiq modulları arasında ötürmək üçün məlumatları JSONEncoder vasitəsilə kodlaşdırmağa üstünlük verir.

Serializasiyada təhlükəsizlik

Etibarsız məlumatların səhv deserializasiyası zəifliklərə səbəb ola bilər. Serializasiya vasitəsilə hücumlar Java-da readObject metodunun dəyişdirilməsindən və ya üçüncü tərəf kitabxanaların təhlükəsiz deserializatorlarından istifadə edir. Android-də etibarsız mənbələrdən alınan məlumatlar üçün Serializable-dan qaçınmaq, bunun əvəzində Parcelable və ya deserializasiyadan sonra bütün sahələrin əl ilə doğrulanması tövsiyə olunur. iOS-da JSONDecoder standart olaraq tiplərə qarşı ciddidir, lakin JSONSerialization ilə işlərkən tərtibatçı şərti çevirmə vasitƏsilƏ tipləri yoxlamalıdır.

Layihə üçün format seçimi

Serializasiya formatını seçərkən performans tələbləri, məlumat ölçüsü və uyğumluq nəzərə alınır. REST API və mikroxidmət arxitekturası üçün optimal seçim JSON olaraq qalır — o, bütün platformalar və dillər tərəfindən dəstəklənir. Yüksək yüklü sistemlər və məhdud trafikli mobil tətbiqlər üçün Protocol Buffers üstünlük təşkil edir ki, onlar daha kiçik ölçü və daha sürətli deserializasiya təmin edir. XML yalnız konfiqurasiya ssenarilərində və köhnə sistemlərlə inteqrasiyada əsaslandırılır. Müasir layihələrdə FlatBuffers da populyarlaşır — deserializasiya mərhələsi olmayan ikili format, oyun məhrəziklərində və minimal gecikməli tətbiqlərdə istifadə olunur. Hər formatın öz yeri var və düzgün seçim birbaşa tətbiqin iş sürətinə və istehlak olunan trafikin həcminə təsir edir.

Tez-tez verilən suallar

Sadə sözlərlə serializasiya nədir?

Serializasiya — bu tətbiq obyektinin şəbəkə üzərində göndərilə bilən və ya faylda saxlanıla bilən formata yığılmasıdır. Təsəvvür edin ki, bir əşyənin şəklini çəkirsiniz — şəkil serializasiyadır, əşyənin şəkildən bərpası isə deserializasiyadır.

JSON Protocol Buffers-dan nə ilə fərqlənir?

JSON — insan tərəfindən oxuna bilən və sxem tələb etməyən mətn formatıdır. Protocol Buffers — məcburi sxemi (.proto) olan ikili formatdır, əhəmiyyətli dərəcədə kiçik ölçüdə və daha yüksək sürətdədir. Protobuf yüksək yüklü sistemlər üçün seçilir, JSON — universal uyğumluq üçün.

Nə vaxt JSON əvəzinə XML istifadə olunur?

XML konfiqurasiya faylları (AndroidManifest, layout resursları), mürəkkəb iç-içə sənədlər və XSD vasitəsilə ciddi doğrulaması olan sistemlər üçün standart olaraq qalır. XML həmçinin SOAP protokollarında və ad fəzalarının dəstəyinin tələb olunduğu köhnə sistemlərdə tətbiq olunur.

Swift-də Codable nədir?

Codable — avtomatik serializasiya və deserializasiya üçün Encodable və Decodable-ı birləşdirən Swift protokoludur. Kompilyator struktur və ya sinfin bütün xassələri üçün encode(to:) və init(from:) metodlarının tətbiqini yaradır.

Hansı daha sürətlidir: Parcelable yoxsa Serializable?

Parcelable Serializable-dan əhəmiyyətli dərəcədə daha sürətli işləyir, çünki refleksiyadan istifadə etmir və sahələri birbaşa bayt axınına yazır. Müasir cihazlarda fərq Parcelable lehinə 10 dəfəyə qədər sürətlənməyə çata bilər.

Nəticələr

  • Serializasiya — obyektin ötürülmə üçün formata çevrilməsi, deserializasiya — əks bərpa
  • JSON — REST API və mobil tətbiqlərdə istifadə olunan universal mətn formatı
  • Protocol Buffers — sabit sxemlə yüksək performanslı ssenarilər üçün Google-ın ikili formatı
  • XML — XSD vasitəsilə doğrulama ilə format, konfiqurasiyalarda və köhnə sistemlərdə tətbiq olunur
  • Parcelable (Android)Codable (iOS) — komponentlər arasında məlumat ötürmək üçün platforma mexanizmləri
  • Serializasiya təhlükəsizliyi kritikdir: etibarsız məlumatlar deserializasiya zamanı zəifliklərə səbəb ola bilər

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun