Serializace dat v mobilním vývoji — co to je, formáty a princip fungování

Autor: IT Sectr Publikováno: 2026-03-08 Doba čtení: 8 min

Serializace je proces přeměny objektu nebo datové struktury na sekvenční formát vhodný pro přenos po síti nebo uložení do souboru. Opačný proces, deserializace, obnovuje data do původního stavu. Podle MDN Web Docs je serializace nezbytná pro jakoukoli komunikaci mezi procesy. Serializace je základem REST API, ukládání do mezipaměti a výměny dat mezi komponentami aplikace.

Hlavní body

  • Serializace — přeměna objektu na datový tok pro přenos nebo uložení
  • JSON — hlavní textový formát pro REST API a webovou komunikaci
  • Protobuf — binární formát s maximálním výkonem a kompaktností
  • XML — přísný formát s validací pro Enterprise a vývoj Android
  • Výběr formátu závisí na požadavcích na výkon a kompatibilitu

Co je serializace?

Serializace je proces přeměny objektu v operační paměti na lineární sekvenci bajtů nebo znaků, kterou lze přenést po síti, uložit do souboru nebo předat jinému procesu. Bez serializace není možná síťová komunikace, ukládání stavu a komunikace mezi procesy.

Serializace zahrnuje dva protichůdné procesy. Přímý proces (serializace) balí data do formátu pro přenos. Opačný proces (deserializace) obnovuje data zpět do objektu. Deserializace je kritická pro bezpečnost: nesprávná vstupní data mohou vést k bezpečnostním chybám v aplikaci.

Vývoj mobilních aplikací používá serializaci všude: odesílání požadavků na server a zpracování odpovědí, ukládání stavu aplikace při otočení obrazovky, ukládání dat do mezipaměti na disku a přenos dat mezi obrazovkami přes Intent (Android) nebo Segue (iOS).

Hlavní úkoly serializace

  • Síťová komunikace — přenos dat mezi klientem a serverem
  • Ukládání stavu — ukládání a obnova dat aplikace
  • Mezipaměť — ukládání výsledků požadavků pro offline přístup
  • Multiplatformovost — výměna dat mezi systémy v různých jazycích
  • Logování — serializace objektů pro zápis do logů

Hlavní formáty serializace

Formáty serializace se dělí na textové a binární. Textové formáty (JSON, XML) jsou čtelné pro člověka a nevyžadují nástroje pro prohlížení. Binární formáty (Protobuf, FlatBuffers, MessagePack) jsou kompaktnější a rychlejší, ale nečtelné bez deserializace. Výběr formátu je kompromis mezi výkonem a pohodlím při ladění.

Kromě JSON, XML a Protobuf existují specializované formáty: FlatBuffers od Google pro hry a AR, MessagePack — kompaktní binární alternativa JSON, Avro od Apache pro velká data v Kafce, YAML — konfigurační formát s podporou komentářů.

Formát Typ Schéma Velikost Rychlost
JSON Textový Volitelné Střední Střední
XML Textový XSD Velká Nízká
Protobuf Binární Povinné Malá Vysoká
FlatBuffers Binární Povinné Malá Maximální
MessagePack Binární Ne Malá Vysoká
Avro Binární JSON Schema Malá Vysoká

Serializace v mobilním vývoji

Serializace na mobilních platformách má svá specifika: omezený provoz, slabší procesory a nutnost ukládání stavu při otáčení obrazovky. Na Androidu se používají Gson, Moshi, Kotlinx Serialization. Na iOS — Codable, JSONSerialization, PropertyListEncoder. Správný výběr knihovny kriticky ovlivňuje výkon aplikace.

Kotlinx Serialization — moderní knihovna od JetBrains pro Kotlin Multiplatform Mobile. Podporuje JSON, Protobuf, CBOR a vlastní formáty. Generování kódu probíhá ve fázi kompilace pomocí pluginu Kotlin Serialization, což zajišťuje vysoký výkon bez použití reflexe.

Kotlinx Serialization (Kotlin Multiplatform)

Knihovna Kotlinx Serialization používá anotaci @Serializable pro třídy a kompilátorový plugin pro generování serializátorů. To zajišťuje vysoký výkon a typovou bezpečnost. Výchozí formát je JSON, ale ostatní formáty jsou také podporovány prostřednictvím dalších modulů.

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)

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

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

Codable na iOS (Swift)

Protokol Codable — vestavěný mechanismus serializace v Swift. Spojuje protokoly Encodable (serializace) a Decodable (deserializace). JSONEncoder a JSONDecoder automaticky zpracovávají vnořené struktury, pole, volitelné hodnoty a vlastní klíče pomocí CodingKeys.

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)

Výkon a porovnání formátů

Výkon formátů serializace se hodnotí podle tří metrik: velikost zprávy, rychlost serializace a rychlost deserializace. Pro mobilní aplikace jsou všechny tři kritické: velikost ovlivňuje provoz a dobu načítání, rychlost — odezvu rozhraní a dobu spuštění aplikace.

Protobuf a FlatBuffers vykazují nejlepší výsledky díky binární reprezentaci. FlatBuffers se liší tím, že nevyžaduje samostatný krok deserializace — data se čtou přímo z binárního bufferu, což je ideální pro hry a AR aplikace s požadavkem na minimální latenci. JSON zůstává nejpopulárnějším formátem pro REST API, navzdory nižšímu výkonu, díky jednoduchosti a univerzálnosti.

Scénář Doporučený formát Důvod
REST API JSON Univerzálnost, čitelnost, podpora
Mikroslužby Protobuf Kompaktnost, rychlost, gRPC
Hry / AR FlatBuffers Zero-copy, minimální latence
Big Data Avro Kompatibilita s Kafka a Hadoop
Konfigurace YAML Komentáře, čitelnost
Android layouts XML Standard platformy

Srovnávací testy

Praktické testy na sadě 1000 uživatelských objektů ukazují: Protobuf vytváří zprávy o velikosti 12 KB (JSON — 85 KB, XML — 120 KB). Doba serializace: Protobuf — 2 ms, JSON — 8 ms, XML — 25 ms. Tato čísla činí binární formáty preferovanými pro systémy s vysokou zátěží a mobilní aplikace s omezeným provozem.

Příklady serializace dat

Příklady demonstrují serializaci stejného objektu v různých formátech. Pomáhá to vizuálně porovnat velikost a čitelnost. Stejný objekt User bude serializován v JSON, XML a Protobuf — je jasně vidět, že JSON je kompaktnější než XML a Protobuf je nejkompaktnější a zároveň nečitelný.

Jeden objekt ve třech formátech

JSON — minimalistická syntaxe, klíče v uvozovkách, hodnoty různých typů. Zabírá 80 znaků. Čitelnost vysoká, vizuální struktura přehledná. Vhodný pro API, kde je důležitá rychlost vývoje a ladění.

XML — každý prvek je zabalen do otevírací a uzavírací značky. Zabírá 150 znaků. Čitelnost střední, struktura přísná. Vhodný pro tok dokumentů a systémy vyžadující validaci pomocí XSD.

Protobuf — binární, 32 bajtů pro tato data. Nečitelný — vyžaduje deserializaci pro prohlížení. Minimální velikost ho činí ideálním pro systémy s vysokou zátěží a mobilní aplikace.

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>

Nejlepší postupy serializace

Nejlepší postupy pomáhají vyhnout se typickým chybám a vybrat správnou strategii serializace pro projekt. Dodržování těchto doporučení zlepšuje výkon, bezpečnost a udržovatelnost kódu.

Doporučení pro mobilní vývoj

  1. Vyberte formát podle scénáře — JSON pro REST API, Protobuf pro gRPC a mikroslužby
  2. Vyhněte se Java Serializable — pomalý a nebezpečný mechanismus, použijte Kotlinx Serialization nebo Moshi
  3. Ignorujte neznámé klíče — nastavte parser, aby přeskakoval pole, která nejsou v modelu
  4. Ukládejte deserializovaná data do mezipaměti — vyhněte se opakovanému parsování stejných dat
  5. Validujte vstupní data — kontrolujte hranice a typy při deserializaci

Bezpečnost a serializace

Bezpečnost serializace — kriticky důležitý aspekt, zejména při deserializaci dat z nedůvěryhodných zdrojů. Útoky na deserializaci mohou vést k vzdálenému spuštění kódu (RCE), což je jedna z nejnebezpečnějších zranitelností ve webových a mobilních aplikacích. Nejznámější případy souvisí s Java Serializable a Python pickle.

Protobuf a JSON mají vestavěnou ochranu proti takovým útokům, protože pracují pouze s daty, nikoli s libovolnými objekty. Java Serializable naopak může obnovit jakoukoli třídu dostupnou v classpath, což ho činí nebezpečným pro příjem dat z externích zdrojů. Na Androidu se doporučuje používat Kotlinx Serialization nebo Moshi místo standardní Java Serialization.

Další bezpečnostní opatření: nastavte limit na velikost vstupních dat, validujte schéma před deserializací, nedůvěřujte Content-Type z HTTP hlaviček, použijte allowlist pro povolené třídy. Pravidelně aktualizujte knihovny serializace, protože zranitelnosti v nich jsou pravidelně objevovány a opravovány.

Často kladené otázky

Jaký je rozdíl mezi serializací a marshallingem?

Serializace převádí objekt na posloupnost bajtů, marshalling přenáší data mezi různými adresními prostory s uchováním typů a struktury. Marshalling zahrnuje serializaci jako součást procesu, ale může také zahrnovat kódování odkazů a správu paměti.

Který formát serializace je nejrychlejší?

FlatBuffers od Google poskytuje maximální rychlost díky zero-copy deserializaci — data se čtou přímo z binárního bufferu bez převodu. Protobuf je na druhém místě, JSON na třetím. XML je nejpomalejší formát z běžných.

Co vybrat pro Android: Gson, Moshi nebo Kotlinx Serialization?

Kotlinx Serialization — nejlepší volba pro nové projekty v Kotlin: generování při kompilaci, podpora Kotlin Multiplatform, null safety. Moshi — dobrá volba pro projekty v Java, výkonnější než Gson. Gson — nejjednodušší knihovna pro začátek, ale pomalejší a používá reflexi.

Jak serializovat objekt s cyklickými referencemi?

Cykliké reference vedou k nekonečné rekurzi při serializaci. Řešení: použijte ID reference místo přímých odkazů na objekty, aplikujte speciální serializační adaptéry (např. @JsonIgnore v Jackson) nebo přepracujte datový model pro odstranění cyklů.

Ovlivňuje serializace bezpečnost aplikace?

Ano, zejména deserializace dat z nedůvěryhodných zdrojů. Zranitelnosti deserializace mohou vést k vzdálenému spuštění kódu. Doporučení: nedeserializujte data z nedůvěryhodných zdrojů, použijte allowlist tříd při deserializaci a validujte schéma dat před zpracováním.

Shrnutí

  • Serializace převádí objekty na datový tok pro přenos a uložení, deserializace je obnovuje
  • JSON — standard pro REST API, XML — pro tok dokumentů, Protobuf — pro mikroslužby a vysokou zátěž
  • Binární formáty (Protobuf, FlatBuffers) jsou 3-10krát kompaktnější a rychlejší než textové
  • Na Androidu se doporučuje Kotlinx Serialization, na iOS — vestavěný Codable
  • Mezipaměť deserializovaných dat snižuje zatížení procesoru a zrychluje aplikaci
  • Bezpečnost deserializace je kritická — kontrolujte vstupní data a použijte allowlist
  • Výběr formátu — kompromis mezi čitelností, výkonem a kompatibilitou

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také