Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 110

Автор Π‘Ρ€ΡŽΡ ЭккСль

print("3anncb Ρ„Π°ΠΉΠ»Π° " + arg). BufferedReader in =

new BufferedReader(new FileReader(arg)); zos putNextEntry(new ZipEntry(arg)). int c.

while((c = in readO) != -1)

out write(c); in closeO. out flushO.

}

out closeO.

// ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма становится Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ

// Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС закрытия Ρ„Π°ΠΉΠ»Π° с Π°Ρ€Ρ…ΠΈΠ²ΠΎΠΌ!

pri nt ("Checksum " + csum getChecksum() getValueO);

// Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ»Ρ‹-

Ρ€Π³Π¨Π‘Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°").

Fi 1 elnputStream fi = new FilelnputStreamCtest zip"). CheckedlnputStream csumi =

new CheckedInputStream(fi. new Adler320); ZipInputStream in2 = new ZipInputStream(csumi). BufferedlnputStream bis = new BufferedInputStream(in2). ZipEntry ze.

while((ze = in2 getNextEntry()) != null) { printCReading file " + ze). int x;

while((x = bis readO) != -1) System out write(x).

}

if(args.length == 1)

print("ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма " + csumi getChecksum() getValueO), bis closeO.

// ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ открытия ΠΈ чтСния

// Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ZIPβ€’

ZipFile zf = new ZipFi1e("test zip").

Enumeration e = zf entriesO;

while(e hasMoreElementsO) {

ZipEntry ze2 = (ZipEntry)e nextElement().

printCFile. " + ze2). ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &

// ... Π·Π°Ρ‚Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅. ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΆΠ΄Π΅

}

/* if(args length == 1) */

}

} ///:-

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, добавляСмого Π² Π°Ρ€Ρ…ΠΈΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ put-NextEntry() с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ZipEntry. Класс ZipEntry содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для добавлСния ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ записи Z IP-Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ: ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² сТатом ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы CRC, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сТатия, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ исходном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ZIP Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. АналогичноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ встрСчаСтся ΠΈ ΠΏΡ€ΠΈ использовании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм: ΠΏΠΎΡ‚ΠΎΠΊΠΈ CheckedlnputStream ΠΈ Checked-OutputStream ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм β€” ΠΈ Adler32, ΠΈ CRC32, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² классС ZipEntry поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ CRC. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ΄ΠΈΠΊΡ‚ΠΎΠ²Π°Π½ΠΎ трСбованиями Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ZIP, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ этом быстрая ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма Adler32 оказываСтся Π² Π½Π΅Ρ€Π°Π²Π½Ρ‹Ρ… условиях с CRC.

Для извлСчСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² классС ZipInputStream прСдусмотрСн ΠΌΠ΅Ρ‚ΠΎΠ΄ getNext-Entry(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт Π°Ρ€Ρ…ΠΈΠ²Π° ZipEntry. Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠΉ записи ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Ρ€Ρ…ΠΈΠ²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Zip File, Ρ‡Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ entries() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Enumeration, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ доступным элСмСнтам Π°Ρ€Ρ…ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ Π˜ΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Checksum. Π’ нашСм случаС ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ссылки Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ CheckedlnputStream ΠΈ CheckedOutputStream, хотя ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Checksum.

НСясно, Π·Π°Ρ‡Π΅ΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ сТатия ZIP Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ setComment(), Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π² Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π°Ρ€Ρ…ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π°Ρ€Ρ…ΠΈΠ²Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ZipInputStream нСльзя. ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ZIP-Π°Ρ€Ρ…ΠΈΠ²Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ZipEntry.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, уплотняСмыС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ; ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ZIP ΠΈ GZIP, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π΄Π°ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ сСтСвых ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Архивы Java ARchives (Ρ„Π°ΠΉΠ»Ρ‹ JAR)

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ZIP Ρ‚Π°ΠΊΠΆΠ΅ примСняСтся Π² Ρ„Π°ΠΉΠ»Π°Ρ… JAR (Π°Ρ€Ρ…ΠΈΠ²Ρ‹ Java ARchive), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ сТатый Ρ„Π°ΠΉΠ». Как ΠΈ всС Π² языкС Java, Ρ„Π°ΠΉΠ»Ρ‹ JAR ΡΠ²Π»ΡΡŽΡ‚ΡΡ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, поэтому Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ совмСстимости ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. НаравнС с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ классов, Π² Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, графичСскиС ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Π΅.

Π€Π°ΠΉΠ»Ρ‹ JAR особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ΠΎΠΌ. Π”ΠΎ ΠΈΡ… появлСния Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос ΠΊ сСрвСру для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для запуска Π°ΠΏΠΏΠ»Π΅Ρ‚Π°. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ всС эти Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ сТимались. ОбъСдинСниС всСх Π½ΡƒΠΆΠ½Ρ‹Ρ… для запуска Π°ΠΏΠΏΠ»Π΅Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ сТатом Ρ„Π°ΠΉΠ»Π΅ сокращаСт врСмя запроса ΠΊ сСрвСру, ΠΏΡ€ΠΈ этом ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сСрвСра. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π°Ρ€Ρ…ΠΈΠ²Π° JAR ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписью.

Π€Π°ΠΉΠ» JAR прСдставляСт собой Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится Π½Π°Π±ΠΎΡ€ сТатых Ρ„Π°ΠΉΠ»ΠΎΠ² вмСстС с манифСстом (manifest), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ… описываСт. (Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ манифСст ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ jar.) Π—Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ манифСстах JAR ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ JDK.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ jar, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поставляСтся вмСстС с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ JDK, автоматичСски сТимаСт Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€Ρƒ. ЗапускаСтся эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

jar [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] мСсто_назначСния [манифСст] список_Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запуска β€” просто Π½Π°Π±ΠΎΡ€ Π±ΡƒΠΊΠ² (дСфисы ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слуТСбныС символы Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹). ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ систСм UNIX/Linux сразу замСтят сходство с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ tar. Допустимы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

с Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ пустого Π°Ρ€Ρ…ΠΈΠ²Π°

t Π’Ρ‹Π²ΠΎΠ΄ содСрТимого Π°Ρ€Ρ…ΠΈΠ²Π°

Ρ… Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСх Ρ„Π°ΠΉΠ»ΠΎΠ²

Ρ… Ρ„Π°ΠΉΠ» Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ

f ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Если Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, jar Ρ€Π΅ΡˆΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅

Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² стандартный ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° m ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ содСрТит имя Ρ„Π°ΠΉΠ»Π°, содСрТащСго манифСст

v Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС дСйствий, выполняСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ jar

ΠΎ Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π΅Π· сТатия (для создания Ρ„Π°ΠΉΠ»ΠΎΠ² JAR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ

Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния CLASSPATH) М_ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ автоматичСского создания манифСста_

Если Π² спискС Ρ„Π°ΠΉΠ»ΠΎΠ² имССтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Ρ‚ΠΎ Π΅Π³ΠΎ содСрТимоС вмСстС с ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ всСми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ автоматичСски помСщаСтся Π² Ρ„Π°ΠΉΠ» JAR. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΡƒΡ‚ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ сохраняСтся.

НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ jar:

jar cf myJarFile jar * class

Команда создаСт Ρ„Π°ΠΉΠ» JAR с ΠΈΠΌΠ΅Π½Π΅ΠΌ myJarFile.jar, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся всС Ρ„Π°ΠΉΠ»Ρ‹ классов ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, с автоматичСски созданным манифСстом:

jar cmf myJarFile jar myManifestFile mf * class

ΠŸΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ β€” Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» JAR Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ манифСст ΠΈΠ· Ρ„Π°ΠΉΠ»Π° myManifest-File.mf:

jar tf myJarFile jar

Π’Ρ‹Π²ΠΎΠ΄ содСрТимого (списка Ρ„Π°ΠΉΠ»ΠΎΠ²) Π°Ρ€Ρ…ΠΈΠ²Π° myJarFile.jar:

jar tvf myJarFile jar

К ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ v для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ…, содСрТащихся Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ myJarFile.jar:

jar cvf myApp jar audio classes image

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ audio, classes ΠΈ image β€” это ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» myApp.jar. Благодаря ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ v Π² процСссС сТатия выводится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎΠ± ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ jar Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ возмоТностями Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π° zip. НапримСр, ΠΎΠ½ Π½Π΅ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π°Ρ€Ρ…ΠΈΠ²Π΅ JAR. Π’Π°ΠΊΠΆΠ΅ нСльзя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ… послС пСрСмСщСния. Но ΠΏΡ€ΠΈ этом созданный Ρ„Π°ΠΉΠ» JAR всСгда читаСтся инструмСнтом jar Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ (Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Ρ‹ zip ΠΎ Ρ‚Π°ΠΊΠΎΠΉ совмСстимости ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‡Ρ‚Π°Ρ‚ΡŒ).

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

БСриализация (serialization) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Java позволяСт Π²Π°ΠΌ Π²Π·ΡΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс Serializable, ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ², ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ справСдливо ΠΈ для сСтСвых соСдинСний, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сСриализации автоматичСски компСнсируСт различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° машинС с ОБ Windows, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ сСти Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρƒ с ОБ UNIX, Π³Π΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ воссоздан. Π’Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, порядкС слСдования Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… дСталях.

Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС сСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² интСрСсна ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ лСгковСсноС Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ (lightweight persistence). ВспомнитС: это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° опрСдСляСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сущСствуСт ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ запусками ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. МоТно Π²Π·ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° диск, Π° послС, ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эффСкт «ТивучСсти». ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° использования Π΄ΠΎΠ±Π°Π²ΠΊΠΈ «лСгковСсноС» Ρ‚Π°ΠΊΠΎΠ²Π°: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСльзя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ «постоянный» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ поддСрТиваСтся языком (хотя вСроятно, такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появится Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ). БистСма выполнСния Π½Π΅ заботится ΠΎ дСталях сСриализации β€” Π²Π°ΠΌ приходится собствСнноручно ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сСриализации, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java JDO ΠΈΠ»ΠΈ инструмСнт, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Hibernate (http://hibernate.sourceforge. net).

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² язык для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π΄Π²ΡƒΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… возмоТностСй. Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Java (RMI) позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, находящимися Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ с Ρ‚Π΅ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° вашСй машинС. ΠŸΡ€ΠΈ посылкС сообщСний ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния, Π° для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Java-Bean. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ состоянии Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ измСняСтся Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ; Π΄Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ сСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².