БСриализация дСсСриализация: БСриализация ΠΈ дСсСриализация Π² Java

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

java — БСриализация простыми словами

Вопрос Π·Π°Π΄Π°Π½

Π˜Π·ΠΌΠ΅Π½Ρ‘Π½ 1 Π³ΠΎΠ΄ 4 мСсяца Π½Π°Π·Π°Π΄

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½ 45k Ρ€Π°Π·

Много Ρ€Π°Π· встрСчал эту «ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ» Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… рСсурсах, часто связано с JSON.

ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, поТалуйста, простыми словами, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация, Π³Π΄Π΅ ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ?

  • java
  • android
  • serialize
0

БСриализация β€” это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для сохранСния состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅Ρ‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) ΠΌΠ΅ΠΆΠ΄Ρƒ запусками. Или для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ экзСмплярами ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ сСти.

Главная идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сСриализованный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ строка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° диск ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ процСссу ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ сСти, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. А Π·Π½Π°Ρ‡ΠΈΡ‚, Π·Π°Π΄Π°Ρ‡Π° сохранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°/Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ этом сводится ΠΊ простой Π·Π°Π΄Π°Ρ‡Π΅ сохранСния Π½Π°Π±ΠΎΡ€Π° Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ строки.

JSON β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· популярных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² для сСриализации, ΠΎΠ½ тСкстовый, лСгковСсный ΠΈ Π»Π΅Π³ΠΊΠΎ читаСтся Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ класс

class Test
{
    int length;
    String name;
    public Test(int length, String name)
    {
        this.length = length;
        this.name = name;
    }
}

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ этого класса Π² сСриализованной Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄

{ "length": 25, "name": "Имя" }

Π‘Π°ΠΌΡƒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ/Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ сСриализации.

17

БСриализация Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ — это процСсс сохранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΠΎ этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ частном случаС — это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСниС Π² Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку, хотя это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСриализуСтся Π² Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку, Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ XML ΠΈ упомянутый Π² вопросС JSON. ПослСдний для этой Ρ†Π΅Π»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярСн Π² послСднСС врСмя, Ρ‚.ΠΊ. JSON — это ΠΈ Ρ‚Π°ΠΊ прСдставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ‚ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся Π² JavaScript. БобствСнно, JSON ΠΈ пСрСводится ΠΊΠ°ΠΊ JavaScript Object Notation.

Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° дискС, для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅Π³ΠΎ ΠΏΠΎ сСти ΠΈΠ»ΠΈ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ процСссу.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ сСриализации, называСтся дСсСрСализация. Π’ случаС, Ссли Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку JSON, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅ΡΠ΅Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

1

Если Π½Π° ΠΊΠΎΡˆΠΊΠ°Ρ… Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ эмулятор ΠΊΠΎΡ‚Π° — Ρ‚Π°ΠΌΠ°Π³ΠΎΡ‡ΠΈ. Π£ вас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класс cat

class Cat {
   private int age;
   private int weight;
   // other cat logic
}

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запускС прилоТСния этот ΠΆΠ΅ ΠΊΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» ΠΆΠΈΡ‚ΡŒ своСй Тизнью, Π° Π½Π΅ пСрСсоздался Π·Π°Π½ΠΎΠ²ΠΎ. Для этого Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ\Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΡ‚Π° — Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ созранСниС\Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Как — Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Serializable ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² тСкстовый Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ JSON (JavaScript Object Notation), ΠΌΠΎΠΆΠ½ΠΎ Π² Π±Π°Π·Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Π“Π»Π°Π²Π½ΠΎΠ΅ — Π²Ρ‹ сохраняСтС ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΅Π³ΠΎ состояниС (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС — поля), ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ это Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ, ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅. Π’Π°ΠΊ ΠΆΠ΅ сСриализованного ΠΊΠΎΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎ сСти Π½Π° сСрвСр. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ состояниС, Π° сСрвСр Ρƒ сСбя создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Cat ΠΈ установит Ρƒ Π½Π΅Π³ΠΎ это состояниС (age ΠΈ weight).

1

БСриализация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния сущностСй Π² Π²ΠΈΠ΄Π΅ строки. НапримСр ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Json — Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ массивы. Π­Ρ‚ΠΈ сущности Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Если вывСсти сСриализованый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Json, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку сСриализованного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

0

БСриализация — это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ «ΠΏΠΎΠ½ΡΡ‚Π½ΠΎΠ³ΠΎ» Π² ΠΌΠ΅Π½Π΅Π΅ — это сСриализация. А Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ — дСсСриализация.

Π”Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ ΠΈΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ Π²ΠΈΠ΄, ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ\ΠΈΠ»ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для хранСния ΠΈΠ»ΠΈ пСрСсылки. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ — Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ хранСния\пСрСсылки Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π² Π½Π΅Π³ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠžΡ‡Π΅Π½ΡŒ часто Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π² JSON — для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° сСрвСр — это сСриализация. И ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ — для использования Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ — это дСсСриализация.

НапримСр — Π² интСрфСйсС прилоТСния Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдставлСны Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ — ΠΈ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ· JSON ΠΈ Π½Π°ΠΏΠΈΡ…Π°Ρ‚ΡŒ Π² ячСйки. ΠŸΠΎΡ‚ΠΎΠΌ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π΄Π΅Ρ€Π΅Π²ΠΎ JSON, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° сСрвСр.

Π’ΠΎΡ‚ ΠΈ всё… А Π²ΠΎΡ‚ это Π²ΠΎΡ‚ «ΠΏΡ€ΠΎΡ†Π΅ΡΡ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ²» — Π²ΠΈΠ΄ΠΈΠΌΠΎ сухая Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ· старого ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°, которая ΠΌΠ°Π»ΠΎ способствуСт пониманию.

1

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅

РСгистрация Ρ‡Π΅Ρ€Π΅Π· Google

РСгистрация Ρ‡Π΅Ρ€Π΅Π· Facebook

РСгистрация Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ‡Ρ‚Ρƒ

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· рСгистрации

ΠŸΠΎΡ‡Ρ‚Π°

НСобходима, Π½ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ показываСтся

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· рСгистрации

ΠŸΠΎΡ‡Ρ‚Π°

НСобходима, Π½ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ показываСтся

By clicking β€œΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ отвСт”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

БСриализация ΠΈ дСсСриализация Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ схСмы ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ВрСмя прочтСния: 3 ΠΌΠΈΠ½.

НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация?

Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π»ΠΈΠ±ΠΎ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΡƒΡŽ, Π»ΠΈΠ±ΠΎ Π² Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСриализуСтся Π² тСкстовый Π²ΠΈΠ΄, Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, XML ΠΈ JSON.

JSON β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· популярных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² для сСриализации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ зависит ΠΎΡ‚ языка программирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соглашСния, Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ программистам C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… языков.

БоотвСтствСнно, дСсСриализация – это ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΡ‚ΠΎΠ² Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

БСриализация Π½ΡƒΠΆΠ½Π°, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ большиС Π΄Π°Π½Π½Ρ‹Π΅ Π² плоскиС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΌ этапС. Π‘Π΅Π· сСриализации ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ это слоТно, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ мноТСство ошибок ΠΈΠ·-Π·Π° слоТности структур Π΄Π°Π½Π½Ρ‹Ρ….

БСриализация с использованиСм Python.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСриализациСй Π² Python ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… являСтся Marsmallow.

Marshmallow, прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСобразования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Python ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Она часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с SQLAlchemy, ORM, которая сопоставляСт схСмы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Python. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Marshmallow.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ схСму для модСлирования Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим модСль для нашСй схСмы, которая называСтся Client.

import datetime as dt
class Client:
    def __init__(self, name, inn):
        self.name = name
        self.inn = inn
        self.created_at = dt.datetime.now()

Π—Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ схСму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сопоставляСт ΠΈΠΌΠ΅Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ.

from marshmallow import Schema, fields
class ClientSchema(Schema):
    id = fields.Integer()
    name = fields.Str()
    inn = fields.Str()
    created_at = fields.
DateTime()

БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ dump(s) схСмы для сСриализации (object to Python type), ΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ dumps() для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° строки Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ JSON ΠΈΠ»ΠΈ dump (), Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄ΠΈΠΊΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

client = Client(id = 1,name="ООО", inn="000000000")
schema = ClientSchema()
result = schema.dumps(client)
result
#Output: {"created_at": "2021-08-06T08:19:57.258180", "name": "OOO", "id": 1, "inn": "000000000"}

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ поля ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти

short_schema = ClientSchema(only=("name", "inn"))
short_schema.dump(client)

#Output: {'inn': '000000000', 'name': 'ООО'}

Β Β Β Β Β Β Β Β  ДСсСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Β Β Β Β Β Β Β Β  По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ load Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Python dict с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

client_data = {
    "created_at": "2021-08-06T08:19:57.258180",
    "id": "1",
    "inn": "000000000",
    "name": "OOO",
}
schema = ClientSchema()
result = schema. load(client_data)
result
#Output: {'created_at': datetime.datetime(2021, 8, 6, 8, 19, 57, 258180), 'id': 1, 'inn': '000000000','name': 'OOO'}

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ сСриализация ΠΈ дСсСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Python являСтся Π²Π°ΠΆΠ½ΠΎΠΉ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. БСриализация ΠΏΠΎΠ»Π΅Π·Π½Π° для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, для упрощСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΈ сохранСнии.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ схСмы Client ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Marshmallow являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом для сСриализации. ΠŸΡ€ΠΈ использовании сСриализатора Π±ΡƒΠ΄Π΅Ρ‚ достаточно ΠΎΠ΄Π½ΠΎΠΉ строки для сохранСния словаря, Π° ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, получится ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΉ ΠΈ скорСС всСго Π³Π»ΡŽΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠ»ΡŽΡΡ‹ использования сСриализаторов ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹.

БСриализация ΠΈ дСсСриализация

β€” Π’Π΅ΠΌΡ‹ Scaler

ΠžΠ±Π·ΠΎΡ€

ΠŸΡ€ΠΎΡ‰Π΅ говоря, сСриализация ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ², Π° дСсСриализация β€” прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅. ΠŸΡ€ΠΈ дСсСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ восстанавливаСтся ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ². Π’ Java БСриализация ΠΈ дСсСриализация ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… сохранСнии Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π° дискС. Π”Π°Π²Π°ΠΉΡ‚Π΅ погрузимся ΠΈ выясним, ΠΊΠ°ΠΊ это происходит ΠΈ ΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² Java.

Scope

  • Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ опрСдСляСтся ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ сСриализация ΠΈ дСсСриализация Π² Java.
  • Он ΠΏΡ€ΠΈΠ·Π²Π°Π½ ΠΏΠΎΠΌΠΎΡ‡ΡŒ читатСлям Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования сСриализации ΠΈ дСсСриализации.
  • ПослС этого Π²Ρ‹ смоТСтС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Java.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС

Π—Π½Π°Π½ΠΈΠ΅ основных конструкций Java (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‚. Π΄.) ΠΈ основных ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ООП Π² Java Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для продвиТСния Π²ΠΏΠ΅Ρ€Π΅Π΄.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΌΡƒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ сСриализации ΠΈ дСсСриализации Π² Java.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅Ρ‚Π΅ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ, Ρ‚. Π΅. Ρ‡Π΅Ρ€Π΅Π· ΡΠΎΡ‚ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ . Голос сначала прСобразуСтся Π² элСктричСскиС сигналы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π»Π΅Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° Π²Ρ‹ΡˆΠΊΡƒ мобильной связи Ρ‡Π΅Ρ€Π΅Π· радиосигналы. Π—Π°Ρ‚Π΅ΠΌ эти элСктричСскиС сигналы Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‹ΡˆΠΊΠΎΠΉ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€. Π˜Ρ‚Π°ΠΊ, Π΄ΠΎ вашСго 9Голос 0025 ( Π² основном Π΄Π°Π½Π½Ρ‹Π΅ ) достигаСт Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π°Π»Π΅ΠΊΠΎ, ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ряд ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ случаС, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Π² Java ( ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Java, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это язык ООП ) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° (ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java) ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, происходит нСсколько ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Π’ основном это сСриализация ΠΈ дСсСриализация. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ большС ΠΎΠ± этом!

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация Π² Java?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π² Java ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… свойства: БостояниС: ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ПовСдСниС: ПовСдСниС Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Identity: Как слСдуСт ΠΈΠ· названия, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. БСриализация ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСобразования состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² для сохранСния ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ».

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ создаСм Π² Java, хранятся Π² памяти ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ сборщиком мусора, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Если этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ сСти, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈ совмСстимом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ².

Π—Π΄Π΅ΡΡŒ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ послС сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² исходноС состояниС Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ сСриализации Π² Java. Π’ Java Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Marker Interface. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° β€” это интСрфСйс Π±Π΅Π· ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВсС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚, это добавляСт ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ особоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ классу. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сСриализуСмоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² наш класс, ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½ΠΎΠ³ΠΎ интСрфСйса Serializable, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° java. io. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Serializable.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ интСрфСйс Serializable, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ классом Employee. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ сСриализуСмоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² класс. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для записи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΠΎΡ‚ΠΎΠΊ Ρƒ нас Π΅ΡΡ‚ΡŒ класс ObjectOutputStream Π² Java. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ сСриализуСмый интСрфСйс, ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса ObjectOutputStream.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ObjectOutputStream

  • ΠœΠ΅Ρ‚ΠΎΠ΄ writeObject(): сСриализуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ записываСт Π΅Π³ΠΎ Π² ObjectOutputStream.
  • close() : Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.
  • flush(): ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Employee.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π’Π½ΡƒΡ‚Ρ€ΠΈ класса Persist ΠΌΡ‹ создали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Employee. Π”Π°Π»Π΅Π΅ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСриализуСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ writeObject(), ΠΈ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сохраняСтся Π² Ρ„Π°ΠΉΠ» 9.0025 fout.тСкст . Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close() Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ закрываСтся.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сСриализации Π² Java

Рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ условиями.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: БСриализация Π² Java с наслСдованиСм

Π’ ООП Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ класса ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ свойства ΠΈ символы ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса называСтся наслСдованиСм. Π£ нас Π΅ΡΡ‚ΡŒ класс Parent/Super ΠΈΠ»ΠΈ класс Child/Derived . Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

Π˜Ρ‚Π°ΠΊ, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класс A являСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классом, Π° класс B наслСдуСтся ΠΎΡ‚ класса A. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, класс B Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Serializable, Π½ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Java Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ сСриализуСмый, Ссли Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс ΡƒΠΆΠ΅ сдСлал это.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: БСриализация Π² Java с Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠ΅ΠΉ

АгрСгация Π² ООП β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования класса, Π² основном класс опрСдСляСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс ΠΊΠ°ΠΊ ссылку Π½Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Код ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° класс ΠΈΠΌΠ΅Π΅Ρ‚ ссылку Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, всС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс Serializable.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: БСриализация Π² Java с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массива ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π’Ρ‹Π²ΠΎΠ΄:

Если ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ сСриализуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° состоит ΠΈΠ· массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² этом случаС всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сСриализуСмыми. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NotSerializableException.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСриализация Java?

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с сСриализуСмым интСрфСйсом ΠΈ ObjectOutputStream Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сСриализации. Π’Π΅ΡΡŒ процСсс сСриализации происходит рСкурсивно.

  • Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Reflection для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ очистки Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сСриализованы Π²ΠΎ врСмя выполнСния.
  • Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ поля ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ сСриализуСтся Π² рСкурсивным способом .

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Π° сСриализация Java?

Π”Π°Π²Π°ΠΉΡ‚Π΅ пСрСчислим нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования ΠΈ ΠΏΠΎΠΉΠΌΠ΅ΠΌ, Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° сСриализация Π² Java.

  1. ΠšΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ : ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠΎ сСти, Ρ‡Ρ‚ΠΎ позволяСт нСскольким систСмам ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
  2. ΠŸΠΎΡΡ‚ΠΎΡΠ½ΡΡ‚Π²ΠΎ : БостояниС любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  3. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ : Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ процСсс клонирования ΠΎΡ‡Π΅Π½ΡŒ простым, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΡƒΡŽ копию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, сСриализовав Π΅Π³ΠΎ Π² Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.
  4. Экономия Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ : ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ созданиС фактичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· класса.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Serializable Π½Π΅ рСализуСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ?

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСриализуСтся, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ?

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π»Π°Π·Π΅ΠΉΠΊΠΈ Π² систСмС бСзопасности. Π§Ρ‚ΠΎ, Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ сСриализуСмыми ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ поля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ?

Когда класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ всС Ρ‚Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ сСриализации, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ( Transient Π·Π²ΡƒΡ‡ΠΈΡ‚ нСсколько ΠΆΠ°Ρ€Π³ΠΎΠ½Π½ΠΎ, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ. ΠœΡ‹ рассмотрСли это Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ) Однако, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ рассматриваСм Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ сСриализуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ поля transient? Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ нСбСзопасно.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ вСсь ΠΊΠΎΠ΄ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ сСриализации.

UID сСрийной вСрсии Π² Java

Π’ процСссС сСриализации срСда выполнСния Java связываСт Π½ΠΎΠΌΠ΅Ρ€ вСрсии с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ сСриализуСмым классом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся UID сСрийной вСрсии . Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ дСйствуСт ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² процСссС сСриализации ΠΈ дСсСриализации. Он провСряСт ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρ‚Π°ΠΌ Π²ΠΎ врСмя процСсса сСриализации, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ сСриализованного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли UID класса, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ, Π½Π΅ совпадаСт с UID ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса отправитСля, это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ

Как ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ этот UID SerialVersion? ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ собствСнный UID, объявив имя поля для любого сСриализуСмого класса. Бинтаксис для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅: Бинтаксис:

НапримСр,

UID сСрийной вСрсии ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ для класса Employee.

Но Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ явно Π½Π΅ объявляСм UID для класса? ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΈ это, Ρ‡Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, связанного с классом? Π§Ρ‚ΠΎ ΠΆ, срСда выполнСния сСриализации позаботится ΠΎΠ± этой ситуации. Он Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ UID ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для класса Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… аспСктов ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса Π² соотвСтствии со спСцификациСй сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Java.

Команда Serialver в Java

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ UID сСрийной вСрсии для класса, Π² Java Development Kit Π΅ΡΡ‚ΡŒ встроСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° serialver. Команда записываСтся Ρ‚Π°ΠΊ: serialver [-classpath classpath] [-show] [classname…]

Π˜Ρ‚Π°ΠΊ, здСсь Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ:

  • -classpath: Π­Ρ‚Π° опция ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ классу ΠΈΠ»ΠΈ Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ класс.
  • -show: опция show ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ простой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, Π³Π΄Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ENTER ΠΈΠ»ΠΈ SHOW, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ UID сСрийной вСрсии.

Π§Ρ‚ΠΎ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСриализуСмого интСрфСйса Π² Java

Π•ΡΡ‚ΡŒ нСсколько ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСриализации.

  1. Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ всСми связанными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.
  2. Если Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» интСрфСйс Serializable, Π² этом случаС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ.
  3. Π’ процСссС сСриализации сохраняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… .
  4. ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ вызываСтся.
  5. Serializable Interface Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ΠΉ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° сСриализации

Π’ основном ΠΌΡ‹ рассмотрСли достоинства ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования сСриализации Π² Ρ€Π°Π·Π΄Π΅Π»Π΅, Π³Π΄Π΅ ΠΌΡ‹ обсуТдали Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. Но Ссли ΠΏΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‚ΠΎ основными прСимущСствами сСриализации ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

  1. Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  2. НС зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.
  3. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ.
  4. ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² создании Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², , Ρ‚.Π΅. ΠΈΡ… ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ .
  5. Π›Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ.
  6. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ бСзопасныС вычислСния Java.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ дСсСриализация Π² Java?

Π’ΠΎΡ‡Π½Π΅Π΅ говоря, дСсСриализация β€” это ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сСриализации. Π­Ρ‚ΠΎ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ процСсс. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, это процСсс прСобразования ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ² Π² исходноС состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Для выполнСния дСсСриализации Π² Java прСдусмотрСн класс ObjectInputStream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ снова ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ классу ObjectOutputStream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ для сСриализации. ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… этого класса.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ObjectInputStream

  • readObject(): Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² Π² состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ считываСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.
  • close(): ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² основном Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π²Π²ΠΎΠ΄Π°.
На ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ процСсс сСриализации ΠΈ дСсСриализации.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дСсСриализации Π² java

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ поняли, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ возьмСм Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰Π΅ΠΌ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΌΡ‹ взяли сСриализуСмый класс Employee ΠΈ сСриализовали Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ дСсСриализуСм ΠΈΡ….

Π’Ρ‹Π²ΠΎΠ΄:

Π˜Ρ‚Π°ΠΊ, здСсь, Π² классС Persist, послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ дСсСриализации. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ObjectInputStream считываСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° f. txt . Π”Π°Π»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ writeObject() выполняСт Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ процСсса ΠΌΡ‹ распСчатали поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Имя ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, дСсСриализация ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ дСсСриализация Java?

Π˜Ρ‚Π°ΠΊ, глядя Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСсСриализации, слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ вызываСтся. БоздаСтся пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ снова с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Reflection Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² поля. Подобно сСриализации, Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ частныС ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ поля.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° дСсСриализации Π² java

  • Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ², Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· класса, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ довольно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ.
  • ВстроСнная функция Java, сторонний инструмСнт Π½Π΅ трСбуСтся.

ОбъяснСниС уязвимостСй дСсСриализации Java

ΠŸΡ€ΠΎΡ‰Π΅ говоря, уязвимости дСсСриализации Java β€” это уязвимости бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² процСссС сСриализации-дСсСриализации врСдоносными дСйствиями. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим это для вашСго Java-прилоТСния. Π’Ρ‹ восстанавливаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ². Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅ ΡƒΠΆΠ΅ сСриализованный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, скаТСм, obj1. Однако вмСсто obj1 Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ obj2. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Ρ… дСйствий; это ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ дСсСриализации Java. НСнадСТныС ΠΈ врСдоносныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ уязвимый ΠΊΠΎΠ΄ дСсСриализации.

Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ дСсСриализации Java?

Для прСдотвращСния уязвимости дСсСриализации Java ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹:

  • Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° дСсСриализованных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, базовая Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ObjectInputStream. БущСствуСт нСсколько Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для выполнСния этих дСйствий ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ способ β€” Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… классов, Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.
  • ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π°Π±ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… классов, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с использованиСм Π±Π΅Π»ΠΎΠ³ΠΎ списка. ДСсСриализация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ возмоТности дСсСриализации уязвимостСй .
  • ΠžΠ±Π½ΠΎΠ²Π»ΡΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ.

Java Transient Keyword

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим случай, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ сСриализуСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΎΡΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова transient. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Java transient ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ поля. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это дСкларируСтся,

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° age Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сСриализован, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ объявлСн ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ имя ΠΈ возраст, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ нСстатичСскими, Π±ΡƒΠ΄ΡƒΡ‚ сСриализованы.

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ сСриализациСй ΠΈ дСсСриализациСй Π² Java

БСриализация ДСсСриализация
БСриализация β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСобразования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ². ДСсСриализация ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² исходноС состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ Π² Ρ„Π°ΠΉΠ», Π‘Π” ΠΈ Ρ‚.Π΄. ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π‘Π” ΠΈ Ρ‚.Π΄. Класс ObjectOutputStream . ВыполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса ObjectInputStream.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

  • БСриализация β€” это процСсс прСобразования состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² .
  • ДСсСриализация ΠΎΠ±Ρ€Π°Ρ‚Π½Π° сСриализации ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
  • Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс Serializable, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
  • ΠšΠ»Π°ΡΡΡ‹ ObjectOutputStream ΠΈ ObjectInputStream ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ соотвСтствСнно.
  • Волько нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ.

сСриализация — Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ дСсСриализация ΠΈ сСриализация Π² JSON?

спросил

ИзмСнСно 3 мСсяца Π½Π°Π·Π°Π΄

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ 383 тыс. Ρ€Π°Π·

Π― Π²ΠΈΠ΄Π΅Π» Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ «Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ» ΠΈ «ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ» с JSON. Π§Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π² Π²ΠΈΠ΄Ρƒ?

  • json
  • сСриализация
  • дСсСриализация
  • json-дСсСриализация
  • json-сСриализация
2

JSON β€” это Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² строку. БСриализация ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² эту строку , Π° дСсСриализация β€” это обратная Π΅ΠΉ опСрация (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки -> ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) .

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΡ… сохранСнии Π² Ρ„Π°ΠΉΠ»Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ строками Π±Π°ΠΉΡ‚ΠΎΠ², Π½ΠΎ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. БСриализация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ эти слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² строки Π±Π°ΠΉΡ‚ΠΎΠ² для Ρ‚Π°ΠΊΠΎΠ³ΠΎ использования. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ строки Π±Π°ΠΉΡ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· строки Π±Π°ΠΉΡ‚ΠΎΠ². Π­Ρ‚ΠΎ извСстно ΠΊΠ°ΠΊ дСсСриализация.

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

 {foo: [1, 4, 7, 10], bar: "Π±Π°Π·"}
 

сСриализация Π² JSON ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² строку:

 '{"foo":[1,4,7,10],"bar":"baz"}'
 

, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Ρƒ ΠΊΡƒΠ΄Π° ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту строку, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. {foo: [1, 4, 7, 10], bar: "Π±Π°Π·"} .

7

Π’ контСкстС хранСния Π΄Π°Π½Π½Ρ‹Ρ…, сСриализация (ΠΈΠ»ΠΈ сСриализация) β€” это процСсс ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ Π±ΡƒΡ„Π΅Ρ€Π΅ памяти) ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ сСтСвого соСдинСния) ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ . […]

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π°Ρ опСрация, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ², дСсСриализация .

– wikipedia.org

JSON (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² JavaScript) β€” это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ стандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ тСкст для хранСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, состоящих ΠΈΠ· ΠΏΠ°Ρ€ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ массивов (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… сСриализуСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ). Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ использованиСм Π² элСктронном ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС Π² Π²Π΅Π±-прилоТСниях с сСрвСрами.

JSON β€” это Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ зависящий ΠΎΡ‚ языка. Он Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈΠ· JavaScript, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ соврСмСнныС языки программирования Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΊΠΎΠ΄ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. ИмСна Ρ„Π°ΠΉΠ»ΠΎΠ² JSON ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .json.

– wikipedia.org

Π’ Python сСриализация Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ прСобразования Π·Π°Π΄Π°Π½Π½ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ подвСску JSON (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Python True Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² JSON true , Π° сам ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² строку) ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ для дСсСриализация .

Python ΠΈ JSON

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ прСдставлСниями Python ΠΈ JSON ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ сравнСнии. НапримСр, ΠΈΠ·ΡƒΡ‡ΠΈΠ² ΠΈΡ… логичСскиС значСния. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ основныС Ρ‚ΠΈΠΏΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΎΠ±ΠΎΠΈΡ… контСкстах:

Python JSON
ΠŸΡ€Π°Π²Π΄Π° ΠΏΡ€Π°Π²Π΄Π°
Π›ΠΎΠΆΡŒ Π»ΠΎΠΆΠ½Ρ‹ΠΉ
НСт ноль
Ρ†Π΅Π»ΠΎΠ΅ число , число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π½ΠΎΠΌΠ΅Ρ€
str (с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ' , Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ' ΠΈ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹ΠΌΠΈ """ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ) строка (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ " ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ)
Π΄ΠΈΠΊΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
список , ΠΊΠΎΡ€Ρ‚Π΅ΠΆ массив

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

ВстроСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Python json β€” это стандартный способ сСриализации ΠΈ дСсСриализации:

 import json
Π΄Π°Π½Π½Ρ‹Π΅ = {
    'ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚': {
        "name": """Π“-Π½ ΠŸΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π΅""",
        "ΠΌΡƒΠΆΡ‡ΠΈΠ½Π°": Π’Π΅Ρ€Π½ΠΎ,
        'возраст': 60,
        Β«ΠΆΠ΅Π½Π°Β»: Π½Π΅Ρ‚,
        Β«Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈΒ»: (Β«Π‘ΠœΠ’Β», «Ауди»)
    }
}
# ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ
json_data = json. dumps (Π΄Π°Π½Π½Ρ‹Π΅, отступ = 2)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (json_data)
# {
# "ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚": {
# "name": "Господин ΠŸΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π΅",
# "муТской": ΠΏΡ€Π°Π²Π΄Π°,
# "возраст": 60,
# "ТСна": ноль,
#     "Π»Π΅Π³ΠΊΠΎΠ²Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ": [
#       "BMW",
# "Ауди"
# ]
# }
# }
# Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ
restore_data = json.loads(json_data) # Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ
 

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ: realpython.com, geeksforgeeks.org

2

ОбъяснСниС сСриализации ΠΈ дСсСриализации с использованиСм Python

Π’ Python для сСриализации ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ pickle . Π˜Ρ‚Π°ΠΊ, процСсс сСриализации называСтся pickling Π² Python. Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ доступСн Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Python .

БСриализация с использованиСм pickle

 ΠΈΠΌΠΏΠΎΡ€Ρ‚Π½Ρ‹ΠΉ pickle
#ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для сСриализации
example_dic={1:"6",2:"2",3:"f"}
#Π³Π΄Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±Π°ΠΉΡ‚Ρ‹ послС сСриализации, wb ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚ записи
pickle_out = ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ (Β«dict.pickleΒ», Β«wbΒ»)
#ВрСмя ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ
pickle.dump(example_dic,pickle_out)
#Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ Π½ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ
pickle_out. close()
 

Π€Π°ΠΉΠ» PICKLE (ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π΅) содСрТит (сСриализованныС Π΄Π°Π½Π½Ρ‹Π΅):

€}q (KX 6qKX 2qKX fqu.

ДСсСриализация с использованиСм pickle

 import pickle
pickle_in = ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ("dict.pickle", "rb")
get_deserialized_data_back=pickle.load(pickle_in)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (get_deserialized_data_back)
 

Π’Ρ‹Π²ΠΎΠ΄:

{1: ‘6’, 2: ‘2’, 3: ‘f’}

2

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π» ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация

БСриализация β€” это процСсс прСобразования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² .

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ²

ΠŸΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² β€” это просто ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ байтовая строка ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ

Иногда Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ люди Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ слово байтовая строка .

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *