Sobes.tech
Junior

Mis on serialiseerimine?

sobes.tech AI

Vastus AI-lt

Serialiseerimine on protsess, kus andmestruktuur või objekt teisendatakse vormingusse, mida saab salvestada, edastada võrgus või hiljem taastada. Vastupidist protsessi nimetatakse deserialiseerimiseks.

Serialiseerimise peamised eesmärgid:

  • Oleku säilitamine: võimaldab salvestada objekti või andmestruktuuri olekut hilisemaks taastamiseks.
  • Andmete edastamine: tagab standardiseeritud vormingu andmete vahetamiseks erinevate süsteemide või protsesside vahel.
  • Vahemälu kasutamine: serialiseeritud andmed on mugavad ajutiseks salvestamiseks vahemällu.

Pythonis kasutatakse sageli järgmisi mooduleid ja formaate:

  • pickle: Python standardmoodul Python objektide serialiseerimiseks ja deserialiseerimiseks. Sobib andmete salvestamiseks ja laadimiseks Python rakendustes. Ei soovitata andmevahetuseks teiste keeltes rakendustega, kuna formaat on spetsiifiline.

    # Objekti salvestamine
    import pickle
    
    data = {'a': 1, 'b': [2, 3]}
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    
    # Objekti laadimine
    with open('data.pkl', 'rb') as f:
        loaded_data = pickle.load(f)
    
  • json: Standartne moodul JSON (JavaScript Object Notation) töötlemiseks. Lai kasutus web-API-de ja andmevahetuse puhul erinevate süsteemide vahel. JSON on tekstiline ja kergesti loetav formaat. Toetab piiratud andmetüüpide komplekti (ridad, numbrid, boolean, nimekirjad, sõnastikud, null).

    # Serialiseerimine JSON-i
    import json
    
    data = {'name': 'Alice', 'age': 30}
    json_string = json.dumps(data)
    print(json_string)
    
    # Deserialiseerimine JSON-ist
    loaded_data = json.loads(json_string)
    print(loaded_data)
    
  • yaml: YAML (Yet Another Markup Language) moodul. Vähem keeruline lugeda kui JSON. Sageli kasutatakse konfiguratsioonifailides.

    # Serialiseerimine YAML-i (vajalik PyYAML paigaldus)
    # import yaml
    #
    # data = {"list": [1, 2, 3], "dict": {"key": "value"}}
    # yaml_string = yaml.dump(data)
    # print(yaml_string)
    #
    # # Deserialiseerimine YAML-ist
    # loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
    # print(loaded_data)
    
  • protobuf (Protocol Buffers): Google'i välja töötatud serialiseerimisvorming. Binaarne, tõhus ja toetab skeeme (kasutades .proto faile). Sageli kasutatakse kõrge jõudlusega süsteemides ja RPC-s (Remote Procedure Call).

Andmeformaadi valik sõltub konkreetsest ülesandest, jõudlusnõuetest, loetavusest ja vajadusest teha koostööd teiste programmeerimiskeeltega.