Adatok szerializációja mobilfejlesztésben — mi ez, formátumok és működési elv

Szerző: IT Sectr Megjelenés: 2026-03-08 Olvasási idő: 8 perc

A szerializáció egy objektum vagy adatszerkezet átalakításának folyamata olyan szekvenciális formátumba, amely alkalmas hálózaton keresztüli továbbításra vagy fájlba mentésre. A fordított folyamat, a deszerializáció, visszaállítja az adatokat az eredeti állapotba. A MDN Web Docs szerint a szerializáció minden folyamatok közötti kommunikációhoz szükséges. A Szerializáció a REST API, a gyorsítótárazás és az alkalmazáskomponensek közötti adatcsere alapját képezi.

Főbb pontok

  • Szerializáció — objektum átalakítása adatfolyammá továbbításhoz vagy tároláshoz
  • JSON — a fő szöveges formátum REST API-hoz és webes kommunikációhoz
  • Protobuf — bináris formátum maximális teljesítménnyel és tömörséggel
  • XML — szigorú formátum érvényesítéssel Enterprise és Android fejlesztéshez
  • Formátumválasztás a teljesítmény- és kompatibilitási követelményektől függ

Mi a szerializáció?

Szerializáció az operatív memóriában lévő objektum lineáris bájt- vagy karaktersorozattá alakításának folyamata, amely hálózaton keresztül továbbítható, fájlba menthető vagy másik folyamatnak átadható. Szerializáció nélkül a hálózati kommunikáció, az állapottárolás és a folyamatok közötti kommunikáció nem lehetséges.

A szerializáció két ellentétes folyamatot foglal magában. A közvetlen folyamat (szerializáció) csomagolja az adatokat továbbításra alkalmas formátumba. A fordított folyamat (deszerializáció) visszaállítja az adatokat objektummá. A deszerializáció kritikus a biztonság szempontjából: a helytelen bemeneti adatok sebezhetőségekhez vezethetnek az alkalmazásban.

A mobilalkalmazások fejlesztésében a szerializáció mindenhol használatos: kérések küldése a szerverre és válaszok feldolgozása, az alkalmazás állapotának mentése képernyőelforgatáskor, adatok gyorsítótárazása a lemezen és adatok továbbítása a képernyők között Intent (Android) vagy Segue (iOS) segítségével.

A szerializáció fő feladatai

  • Hálózati kommunikáció — adatok továbbítása kliens és szerver között
  • Állapottárolás — alkalmazásadatok mentése és visszaállítása
  • Gyorsítótárazás — kérések eredményeinek mentése offline eléréshez
  • Platformfüggetlenség — adatcsere különböző nyelvű rendszerek között
  • Naplózás — objektumok szerializációja naplókba íráshoz

Fő szerializációs formátumok

Szerializációs formátumok szöveges és bináris formátumokra oszthatók. A szöveges formátumok (JSON, XML) ember által olvashatók és nem igényelnek eszközöket a megtekintéshez. A bináris formátumok (Protobuf, FlatBuffers, MessagePack) tömörebbek és gyorsabbak, de deszerializáció nélkül nem olvashatók. A formátumválasztás kompromisszum a teljesítmény és a hibakeresés kényelme között.

A JSON, XML és Protobuf mellett speciális formátumok is léteznek: FlatBuffers a Google-tól játékokhoz és AR-hoz, MessagePack — a JSON tömör bináris alternatívája, Avro az Apache-tól nagy adatokhoz a Kafka-ban, YAML — konfigurációs formátum megjegyzések támogatásával.

Formátum Típus Séma Méret Sebesség
JSON Szöveges Opcionális Közepes Közepes
XML Szöveges XSD Nagy Alacsony
Protobuf Bináris Kötelező Kicsi Magas
FlatBuffers Bináris Kötelező Kicsi Maximális
MessagePack Bináris Nem Kicsi Magas
Avro Bináris JSON Schema Kicsi Magas

Szerializáció a mobilfejlesztésben

Szerializáció a mobil platformokon sajátos jellemzőkkel bír: korlátozott forgalom, gyengébb processzorok és az állapot mentésének szükségessége képernyőelforgatáskor. Androidon Gson, Moshi, Kotlinx Serialization használatos. iOS-en — Codable, JSONSerialization, PropertyListEncoder. A könyvtár helyes megválasztása kritikusan befolyásolja az alkalmazás teljesítményét.

A Kotlinx Serialization — egy modern könyvtár a JetBrains-től Kotlin Multiplatform Mobile-hoz. Támogatja a JSON, Protobuf, CBOR és egyéni formátumokat. A kódgenerálás a fordítási szakaszban történik a Kotlin Serialization plugin segítségével, ami magas teljesítményt biztosít reflexió nélkül.

Kotlinx Serialization (Kotlin Multiplatform)

A Kotlinx Serialization könyvtár a @Serializable annotációt használja osztályokhoz és egy fordítóplugint a szerializátorok generálásához. Ez magas teljesítményt és típusbiztonságot biztosít. Az alapértelmezett formátum a JSON, de más formátumok is támogatottak további modulokon keresztül.

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)

    // Szerializáció
    val jsonString = json.encodeToString(project)

    // Deszerializáció
    val restored = json.decodeFromString<Project>(jsonString)
}

Codable iOS-en (Swift)

A Codable protokoll — a beépített szerializációs mechanizmus Swift-ben. Egyesíti az Encodable (szerializáció) és Decodable (deszerializáció) protokollokat. A JSONEncoder és JSONDecoder automatikusan feldolgozza a beágyazott struktúrákat, tömböket, opcionális értékeket és egyéni kulcsokat a CodingKeys segítségével.

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)

Teljesítmény és formátumok összehasonlítása

Teljesítmény a szerializációs formátumokat három mérőszám alapján értékelik: üzenetméret, szerializációs sebesség és deszerializációs sebesség. Mobilalkalmazások esetében mindhárom kritikus: a méret befolyásolja a forgalmat és a betöltési időt, a sebesség — a felület reagálóképességét és az alkalmazás indítási idejét.

A Protobuf és a FlatBuffers mutatják a legjobb eredményeket a bináris reprezentációnak köszönhetően. A FlatBuffers abban különbözik, hogy nem igényel külön deszerializációs lépést — az adatok közvetlenül a bináris pufferből olvashatók, ami ideális a minimális késleltetést igénylő játékokhoz és AR alkalmazásokhoz. A JSON továbbra is a legnépszerűbb formátum a REST API-hoz, az alacsonyabb teljesítmény ellenére, az egyszerűség és univerzalitás miatt.

Forgatókönyv Ajánlott formátum Ok
REST API JSON Univerzalitás, olvashatóság, támogatás
Mikroszolgáltatások Protobuf Tömörség, sebesség, gRPC
Játékok / AR FlatBuffers Zero-copy, minimális késleltetés
Big Data Avro Kompatibilitás Kafka-val és Hadoop-dal
Konfiguráció YAML Megjegyzések, olvashatóság
Android layouts XML Platform szabvány

Összehasonlító tesztek

Gyakorlati tesztek 1000 felhasználói objektum halmazán azt mutatják: Protobuf 12 KB méretű üzeneteket hoz létre (JSON — 85 KB, XML — 120 KB). Szerializációs idő: Protobuf — 2 ms, JSON — 8 ms, XML — 25 ms. Ezek a számok a bináris formátumokat teszik előnyössé a nagy terhelésű rendszerek és korlátozott forgalmú mobilalkalmazások számára.

Példák adatok szerializációjára

Példák bemutatják ugyanazon objektum szerializációját különböző formátumokban. Ez segít vizuálisan összehasonlítani a méretet és az olvashatóságot. Ugyanaz a User objektum lesz szerializálva JSON, XML és Protobuf formátumban — jól látható, hogy a JSON tömörebb, mint az XML, a Protobuf pedig a legtömörebb és egyben olvashatatlan.

Egy objektum három formátumban

JSON — minimalista szintaxis, kulcsok idézőjelek között, különböző típusú értékek. 80 karaktert foglal. Olvashatóság magas, vizuális struktúra tiszta. Alkalmas API-hoz, ahol a fejlesztési és hibakeresési sebesség fontos.

XML — minden elem nyitó- és zárócímkébe van csomagolva. 150 karaktert foglal. Olvashatóság közepes, struktúra szigorú. Alkalmas dokumentumáramláshoz és XSD-n keresztüli érvényesítést igénylő rendszerekhez.

Protobuf — bináris, 32 bájt ezekhez az adatokhoz. Olvashatatlan — megtekintéséhez deszerializáció szükséges. Minimális mérete ideálissá teszi nagy terhelésű rendszerekhez és mobilalkalmazásokhoz.

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>

Legjobb gyakorlatok szerializációhoz

Legjobb gyakorlatok segítenek elkerülni a tipikus hibákat és kiválasztani a megfelelő szerializációs stratégiát a projekthez. Ezen ajánlások betartása javítja a teljesítményt, biztonságot és a kód karbantarthatóságát.

Ajánlások mobilfejlesztéshez

  1. Válassza ki a formátumot a forgatókönyv szerint — JSON REST API-hoz, Protobuf gRPC-hez és mikroszolgáltatásokhoz
  2. Kerülje a Java Serializable-t — lassú és nem biztonságos mechanizmus, használja a Kotlinx Serialization-t vagy Moshi-t
  3. Hagyja figyelmen kívül az ismeretlen kulcsokat — állítsa be az elemzőt, hogy ugorja át a modellben nem szereplő mezőket
  4. Gyorsítótárazza a deszerializált adatokat — kerülje ugyanazon adatok ismételt elemzését
  5. Érvényesítse a bemeneti adatokat — ellenőrizze a határokat és típusokat deszerializációkor

Biztonság és szerializáció

Szerializáció biztonsága — kritikusan fontos szempont, különösen a megbízhatatlan forrásokból származó adatok deszerializációja esetén. A deszerializációs támadások távoli kódvégrehajtáshoz (RCE) vezethetnek, ami az egyik legveszélyesebb sebezhetőség a webes és mobil alkalmazásokban. A leghíresebb esetek a Java Serializable és a Python pickle kapcsán ismertek.

A Protobuf és a JSON beépített védelmet nyújt az ilyen támadások ellen, mivel csak adatokkal dolgoznak, nem tetszőleges objektumokkal. A Java Serializable ezzel szemben képes visszaállítani bármely, a classpath-ben elérhető osztályt, ami veszélyessé teszi a külső forrásokból érkező adatok fogadására. Androidon ajánlott a Kotlinx Serialization vagy Moshi használata a szabványos Java Serialization helyett.

További biztonsági intézkedések: állítson be korlátot a bemeneti adatok méretére, érvényesítse a sémát deszerializáció előtt, ne bízzon a HTTP-fejlécek Content-Type mezőjében, használjon engedélyezési listát (allowlist) a megengedett osztályokhoz. Rendszeresen frissítse a szerializációs könyvtárakat, mivel a bennük lévő sebezhetőségeket időszakosan felfedezik és kijavítják.

Gyakran Ismételt Kérdések

Mi a különbség a szerializáció és a marshalling között?

Szerializáció egy objektumot bájtsorozattá alakít, a marshalling adatokat továbbít különböző címtartományok között a típusok és struktúra megőrzésével. A marshalling magában foglalja a szerializációt a folyamat részeként, de tartalmazhat hivatkozások kódolását és memóriakezelést is.

Melyik szerializációs formátum a leggyorsabb?

A Google FlatBuffers biztosítja a maximális sebességet a zero-copy deszerializációnak köszönhetően — az adatok közvetlenül a bináris pufferből olvashatók átalakítás nélkül. A Protobuf a második, a JSON a harmadik helyen áll. Az XML a leggyakoribb formátumok közül a leglassabb.

Mit válasszak Androidhoz: Gson, Moshi vagy Kotlinx Serialization?

Kotlinx Serialization — a legjobb választás új Kotlin projektekhez: fordító általi generálás, Kotlin Multiplatform támogatás, null safety. A Moshi jó választás Java projektekhez, teljesítménye jobb, mint a Gson-é. A Gson a legegyszerűbb könyvtár kezdéshez, de lassabb és reflexiót használ.

Hogyan szerializáljunk ciklikus hivatkozásokat tartalmazó objektumot?

A ciklikus hivatkozások végtelen rekurzióhoz vezetnek szerializációkor. Megoldások: használjon ID hivatkozásokat a közvetlen objektumhivatkozások helyett, alkalmazzon speciális szerializációs adaptereket (pl. @JsonIgnore a Jacksonban), vagy tervezze újra az adatmodellt a ciklusok megszüntetésére.

Befolyásolja-e a szerializáció az alkalmazás biztonságát?

Igen, különösen a megbízhatatlan forrásból származó adatok deszerializációja. A deszerializációs sebezhetőségek távoli kódvégrehajtáshoz vezethetnek. Javaslatok: ne deszerializáljon adatokat megbízhatatlan forrásokból, használjon osztály-allowlistet deszerializációkor és érvényesítse az adatsémát feldolgozás előtt.

Összefoglalás

  • Szerializáció objektumokat alakít adatfolyammá továbbításhoz és tároláshoz, a deszerializáció visszaállítja azokat
  • JSON — szabvány REST API-hoz, XML — dokumentumáramláshoz, Protobuf — mikroszolgáltatásokhoz és nagy terheléshez
  • Bináris formátumok (Protobuf, FlatBuffers) 3-10-szer tömörebbek és gyorsabbak, mint a szöveges formátumok
  • Androidon a Kotlinx Serialization ajánlott, iOS-en — a beépített Codable
  • Gyorsítótárazás a deszerializált adatok csökkenti a processzor terhelését és gyorsítja az alkalmazást
  • Biztonság a deszerializáció kritikus — ellenőrizze a bemeneti adatokat és használjon allowlistet
  • Formátumválasztás — kompromisszum az olvashatóság, teljesítmény és kompatibilitás között

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is