JavaRush /Java блогы /Random-KK /Java тіліндегі сериялау пішімдері

Java тіліндегі сериялау пішімдері

Топта жарияланған
Сәлеметсіз бе! Java тіліндегі сериализация туралы сөйлесейік. Естеріңізде болса керек, бізде сериализация бойынша лекциялар болған. Дұрыс :) Міне, біріншісі , міне, екіншісі Сериализацияның қалай жұмыс істейтінін, оның не үшін қажет екенін және Java-да ол үшін қандай құралдар бар екенін жақсы есіңізде ұстамасаңыз, осы лекцияларды қарап шығуға болады. Бүгінгі дәріс теориялық болады және онда біз сериялау форматтарын егжей-тегжейлі қарастырамыз. Java тіліндегі сериялау пішімдері - 1Алдымен, сериализацияның не екенін еске түсірейік. Серияландыру - an object күйін byteтар тізбегіне сақтау процесі. Сериясыздандыру - бұл byteтардан нысанды қайта құру процесі. Java нысанын желі арқылы сериялауға және тасымалдауға болады (мысалы, басқа компьютерге). Сонымен, дәл осы byte тізбегі әртүрлі пішімдерде ұсынылуы мүмкін. Сіз мұны күнделікті компьютерді пайдаланудан жақсы білесіз. Мысалы, сіз оқып жатқан электрондық кітап (немесе қарапайым мәтіндік құжат) әртүрлі форматтарда жазылуы мүмкін:
  • docx (Microsoft Word пішімі);
  • pdf (Adobe пішімі);
  • mobi (әдетте Amazon Kindle құрылғыларында қолданылады);
  • және тағы басқалар (ePub, djvu, fb2...).
Міндеті бір: мәтінді адам оқи алатындай етіп беру. Бірақ адамдар пішімдердің тұтас тобын ойлап тапты. Олардың жұмысының егжей-тегжейіне тоқталмай-ақ, бұл белгілі бір себептермен жасалды деп болжауға болады. Олардың әрқайсысының басқалармен салыстырғанда өз артықшылықтары мен кемшіліктері болуы мүмкін. Мүмкін сериялау пішімдері сол принцип бойынша жасалған шығар? Жарайсыңдар, студент! :) Дәл солай. Мәліметтерді қашықтыққа жіберу өте нәзік нәрсе және онда көптеген факторлар бар. Деректерді кім жібереді? Қайда? Қандай көлем? Қабылдаушы тарап адам немесе машина бола ма (яғни, деректер адам оқи алатын болуы керек)? Деректерді қандай құрылғы оқиды? Жағдайлар әртүрлі екені анық. 500 КБ кескінді бір смартфоннан екіншісіне тасымалдау қажет болғанда, бұл бір нәрсе. Мүмкіндігінше тиімді түрде қысылып, сонымен бірге мүмкіндігінше тез тасымалдануы қажет 500 тераbyte бизнес деректері туралы айтатын болсақ, бұл мүлдем басқаша. Негізгі сериялау пішімдерін қарастырайық және әрқайсысының артықшылықтары мен кемшіліктерін қарастырайық!

JSON

JavaScript нысан белгісі. Сіз онымен біраз таныссыз! Біз бұл туралы осы лекцияда айттық және JSON жүйесінде сериализацияны осында қарастырдық . Бұл өз атауын бір себеппен алды. JSON түрлендірілген Java нысандары шын мәнінде JavaScript нысандарына ұқсайды. Біздің нысанның мағынасын түсіну үшін сізге JavaScript білудің қажеті жоқ:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Бір нысанды өту қажет емес. JSON сонымен қатар нысандар жиымын қамтуы мүмкін:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON JavaScript нысаны болғандықтан, ол келесі JavaScript деректер пішімдерін қолдайды:
  • жіптер;
  • сандар (сан);
  • an objectілер (an object);
  • массивтер (массив);
  • логикалық мәндер (шын және жалған);
  • null.
JSON қандай артықшылықтарға ие?
  1. Адам оқи алатын формат. Егер сіздің соңғы пайдаланушыңыз адам болса, бұл айқын артықшылық. Мысалы, сіздің serverіңіз ұшу кестелері бар дерекқорды сақтайды. Адам клиент үйде компьютерде отырғанда веб-қосымшаны пайдаланып осы дерекқордан деректерді сұрайды. Деректерді ол түсінетін пішімде беру қажет болғандықтан, JSON тамаша шешім болып табылады.

  2. Қарапайымдылық. Бұл қарапайым деп айтуға болады :) Жоғарыда біз екі JSON файлының мысалын келтірдік. JavaScript бар екенін ешқашан естімеген болсаңыз да (оның нысандарын былай қойғанда), онда қандай нысандар сипатталғанын оңай түсінуге болады.
    Барлық JSON құжаттамасы бірнеше суреттері бар бір веб-бет болып табылады.

  3. Кең таралған. JavaScript – басым интерфейс тілі және ол оның шарттарын белгілейді. JSON пайдалану міндетті болып табылады. Сондықтан көптеген веб-қызметтер деректер алмасу пішімі ретінде JSON пайдаланады. Әрбір заманауи IDE JSON пішімін (соның ішінде Intellij IDEA) қолдайды. Барлық ықтимал бағдарламалау тілдері үшін JSON-мен жұмыс істеу үшін көптеген кітапханалар жазылған.

Мысалы, сіз Java нысандарын JSON форматында сериялауды үйренген лекцияда Джексон кітапханасымен жұмыс істедіңіз. Бірақ Джексоннан басқа, мысалы, GSON бар - Google-дан өте ыңғайлы кітапхана.

YAML

Өзінің өмір сүруінің басында ол Yet Another Markup Language – «басқа белгілеу тілі» дегенді білдіреді. Сол кезде ол XML-ге бәсекелес ретінде орналасты. Енді, уақыт өткеннен кейін ол «YAML белгілеу тілі емес» дегенді білдіреді («YAML - белгілеу тілі емес»). Ол қандай? Біздің компьютерлік ойынымыз үшін 3 кейіпкерлер класын жасау керек деп елестетіп көрейік: Жауынгер, Сиқыршы және Ұры. Олар келесі сипаттамаларға ие болады: күш, ептілік, төзімділік және қару жиынтығы. Класс сипаттамасы бар YAML файлымыз келесідей болады:
classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear

 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
YAML файлында ағаш құрылымы бар: кейбір элементтер басқаларының ішінде кірістірілген. Әрбір деңгейді белгілеу үшін бос орындардың белгілі бір санын пайдалану арқылы ұя салуды басқара аламыз. YAML форматының қандай артықшылықтары бар?
  1. Адам оқи алады. Тағы да, сипаттамасы жоқ yaml файлын көрсеңіз де, онда қандай нысандар сипатталғанын оңай түсінуге болады. YAML - бұл yaml.org сайтының басты беті кәдімгі yaml файлы екенін адам оқуы қаншалықты жақсы :)

  2. Ықшамдық. Файл құрылымы бос орындар арқылы қалыптасады: жақшаларды немесе тырнақшаларды пайдаланудың қажеті жоқ.

  3. Бағдарламалау тілдеріне тән деректер құрылымдарын қолдау. JSON және басқа да көптеген пішімдерге қарағанда YAML-дің үлкен артықшылығы оның әртүрлі деректер құрылымдарын қолдауы болып табылады. Олардың арасында:

    • !!map
      Көшірмелерді алу мүмкіндігі жоқ кілт: мән жұптарының ретсіз жинағы;

    • !!omap
      Кілттердің реттелген тізбегі: қайталану мүмкіндігі жоқ мән жұптары;

    • !!жұптар:
      кілттің реттелген тізбегі: қайталану мүмкіндігі бар мән жұптары;

    • !!
      бір-біріне тең емес мәндердің ретсіз тізбегін орнату;

    • !!seq
      Ерікті мәндер тізбегі;

    Бұл құрылымдардың кейбірі сізге Java-дан таныс болады! :) Осы мүмкіндіктің арқасында әртүрлі деректер құрылымдарын бағдарламалау тілдерінен YAML пішіміне сериялауға болады.

  4. Зәкір мен бүркеншік атын пайдалану мүмкіндігі

    «Зәкір» және «бүркеншік ат» сөздерінің аудармасы - «зәкір» және «лақап ат». Негізінде, ол YAML-де осы терминдердің мәнін өте дәл сипаттайды.

    Олар yaml файлындағы элементті анықтауға және ол қайталанатын болса, файлдың қалған бөлігінде оған сілтеме жасауға мүмкіндік береді. Анкерлік белгі арқылы жасалады &және бүркеншік ат көмегімен жасалады *.

    Бізде Лев Толстойдың кітаптарының сипаттамасы бар файл бар делік. Әр жолы автордың атын қолмен жазбау үшін біз жай ғана якорь «leo» жасап, қажет кезде бүркеншік атын қолданамыз:

    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859

    Бұл файлды кейбір талдаушымен оқығанда, «Лев Толстой» мәні бүркеншік атымыздың орнына дұрыс орындарға ауыстырылады.

  5. Деректерді YAML ішінде басқа пішімдерге ендіруге болады. Мысалы, JSON:

    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]

Басқа сериялау пішімдері

XML

Бұл пішім тегтер ағашы деп аталатынға негізделген.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Әрбір элемент ашу және жабу тегіннен (<> және </>) тұрады. Әрбір элементтің кірістірілген элементтері болуы мүмкін. XML - JSON және YAML-ден кем түспейтін жалпы формат (егер нақты жобаларда пайдалану туралы айтатын болсақ). Бізде XML бойынша бөлек дәріс бар .

BSON (екілік JSON)

Оның аты айтып тұрғандай, ол JSON-қа өте ұқсас, бірақ адам оқи алмайды және екілік пішімдегі деректермен жұмыс істейді. Бұл кескіндерді және басқа тіркемелерді сақтау және тасымалдау үшін оны өте ыңғайлы етеді. Сонымен қатар, BSON JSON ішінде қол жетімді емес кейбір деректер түрлерін қолдайды. Мысалы, BSON файлына күнді (миллисекунд пішімінде) немесе тіпті JavaScript codeының бір бөлігін жазуға болады. Танымал NoSQL MongoDB дерекқоры ақпаратты BSON пішімінде сақтайды.

Позицияға негізделген протокол

Кейбір жағдайларда бізге тасымалданатын деректер көлемін күрт азайту керек (мысалы, деректер көп болса және жүктемені азайту керек болса). Бұл жағдайда біз позицияға негізделген протоколды пайдалана аламыз , яғни параметрлердің атауларынсыз параметр мәндерін жібереміз.
"Leo Tolstoy" | "Anna Karenina" | 1873
Бұл пішімдегі деректер толыққанды JSON файлына қарағанда әлдеқайда аз орын алады. Әрине, басқа да сериялау пішімдері бар, бірақ олардың барлығын дәл қазір білудің қажеті жоқ :) Қазір қолданбаларды әзірлеудің салалық стандарты болып табылатын пішімдермен танысып, олардың бір-бірінен артықшылықтары мен айырмашылықтарын есте сақтағаныңыз жақсы. . Ал біздің лекциямыз аяқталды :) Бүгін бір-екі мәселені шешуді ұмытпаңыз! Келесі кездескенше! :)
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION