From 399bbd9feb32f896f488a46aeba077b4ae1167da Mon Sep 17 00:00:00 2001 From: "Ivan I. Ovchinnikov" Date: Wed, 30 Nov 2022 21:58:48 +0300 Subject: [PATCH] more scenarios done, started methodics for clean --- build/jtc1-01a.pdf | Bin 519118 -> 519211 bytes jtc1-01a.tex | 2 +- jtc5-05a.tex | 411 ++++++++++++++ pics/jc-01-jvm-struct.pdf | Bin 1810 -> 0 bytes pics/jc-01-jvm-struct.svg | 62 +-- scenarios/build/jtc4-04b.pdf | Bin 62774 -> 83343 bytes scenarios/build/jtc5-05b.pdf | Bin 0 -> 116666 bytes scenarios/jtc4-04b.tex | 98 +++- scenarios/jtc5-05b.tex | 514 ++++++++++++++++++ scenarios/jtd1-06b.tex | 110 ++++ settings/main-style-preamble.tex | 4 +- svg-inkscape/jc-01-jvm-struct_svg-tex.pdf | Bin 0 -> 1789 bytes .../jc-01-jvm-struct_svg-tex.pdf_tex | 14 +- 13 files changed, 1165 insertions(+), 50 deletions(-) create mode 100644 jtc5-05a.tex delete mode 100644 pics/jc-01-jvm-struct.pdf create mode 100644 scenarios/build/jtc5-05b.pdf create mode 100644 scenarios/jtc5-05b.tex create mode 100644 scenarios/jtd1-06b.tex create mode 100644 svg-inkscape/jc-01-jvm-struct_svg-tex.pdf rename pics/jc-01-jvm-struct.pdf_tex => svg-inkscape/jc-01-jvm-struct_svg-tex.pdf_tex (89%) diff --git a/build/jtc1-01a.pdf b/build/jtc1-01a.pdf index 898851763696c5f2d7d86d96eb87dbb6711ccd01..d1596a5b2443fce5003a792bd065d860322e0bcf 100644 GIT binary patch delta 48104 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 delta 48042 zcmV)MK)AoF*dNZv%0x>j~m+}NB4&avUoCd-C|0TsDiy~>4%<=>@ zf7j^%R%q#`gA!W%>Ery@QA&N0(p=`hKmMG4|9C*GKsepgDu0#AeoAGoGkCmrYS!t; z%m;(N_JaRQ{9V!#DXp9jO1tzX;2W3^Arp0r)2nM*XlY?3!T0u**32 zbXtJpqVlZ5CHq5oN^Rw7KG)PRwTpGKfm{nL!>i?_@)WzA<(YC!1`rHbk_sbPk_f zn>W4~6^-jY)2ie!n|8X)@sv5i%I{H#RATm27a5kw8@=p<{OD?Pkb;%tmG7 zG9X-rVGY041srL#r7h+>j}-Lue_HrK!G1{xkWrLvK?|Wl;;D=FYops>rJ`>_JqK#% z2i3$PxR7I!C|hMyG=lSwqY+ocQJNf0L}*!{S+T!D_J8I~hG3H^)~0eT!9#mjw`4yj z{ArGARS@F}GTEs40liLs(DT7p$TsoEo?j{podMnKQMHRb_N&wjOYMrKf5`18%Ebxb zq_9*ci9Sijk+7t9>5k|O}xb*~- zf1f+{jz$<|-r2jOOnYmU%>Vk{3ZKb3X6@O#r=-1;3(q_DR$e$0-`TsPB%8++B2t?j z+Z%)bsCTySDA(S6$KFng;NNk1Pnnia{u&#|iVgZ^G=j zbc0{GGx)9D`zurSow=`+#&g@Xmny7xLC=1#J5VbnY_M-Qu%lF=FOc}QZ=d~fZTTrv zaw|nCE~ov#WMeB(nC(omT6vyUyYgAMgno{*+>cNlE5tm+-VB!v_XI3|g+|!dp<}HG z?^K$WFrR8&icY%N;WKw!>tKb^;p;($=LQ-m$b3aoUPDf6COqy`#%2|KxIanMIquvX z+Y}Kh=>|!$Zscjjb8p2+-Nd4PdcKhN_s16Mtx@i&5C$xMcC6OpiNnTBQX42!4@+JL zM~LX`xAIC$se-T5*>I$PhDuoXY!sZ!1ilrUb!5wIhMWU7jGeA-Jhn80-4m~6_K+LS zb9byoWyJBZfhj1qHTPS_4L+4b^2R`I{qw-FYjD-RGz;hZB<&Uw=`K__24byYrO~IV zXNLyA86! zxL;`P@-W%no9nX+h9TIl$AhEY-w&7EBVqqbGZD6c3jL!tr-6IlV47^it)VkcC3mwDCs&1H#hgcgF23 z*jQ}V1lWr4O4m{pO#x!%*4auu;t0pBuBDog^1`EDj~P{eR8=eFx6-{ZO)E@k0ny{7 z7CwX>)!Ts3!3~tjkebh?B7evj&)R!OC0K=4AA4I0)*gV(!|RsjB#9fxx`I-xEWSp! z$2@P+|LW!&D9ytG(p6&^3LHPXvh-Mr*lD<9CuV8*s)d-~5N8!PI)ZPCiN2DsU>;l^-t31*AHcl3LQzSNsG<;;{@W>3oIWRc$*b5#)2P#YOK7!)g z-p0;Ndt&h@7Q$|pO@+vbsmS4>gaB^}a`1nTY`o9sWmkQ5%Z-)IK8TFTX{a^~X(_Gh znlslo5Psm3Nb$WR`|zdrGbllU+*uwCG>f?r9rAV(27gSp%CafkwJ*D_JttsF%G_Jb zwHSW+_$MP1qe?L;Epscv#^++uFT?_6LO!m$7;O3K_*UhHA2!Kv15>XS(ohx{(Mx}W zdHu`TRi5^kQ~At`-KlS7MfZSn{VU4gixf?Mmt)OCETK1chru*Duat=cgfek~i;S!C zOu@c#xMpTg+lH@wvAln?bJ-a2tES=Dv!%dG16#cY3!KHbi1PcN_Ey$st(NyFNSNCj z07&-jQ}^y*$oby33b5B%*@1b&WT8eL+RQbttA4~PY5C-HQnp^%3fTB=z*Q(3+c~Sx zjKsG|!YIgms5w~=vflajrBvFbR(18WT{|m2y|wrC)L;Jcf2SsN6qn&R2NRdm1O+F5 zGci6s3UhRFWnpa!c-rk+JFhFb4es+R<_}oW`vDkJ1V}EBZj;*uDSZ4$lPz|e{QXc8 zNm1jmk9~Ht*dq7B@bQd9k<`bhwEVP~MZ>@ zlEdW>aWvkLjAsf!c*Np zA=Kyaw}tOZe-{ePs3SbgZ?jB&yP8V3j*cI7RQqM>D0q9u`EE72t-~wlPCc6S;Ay^I z+n)|61{`8nQ>Rpdjln#LkeM|m)mb8;8Uq*n)VYD@3W`-RRhTANTurRsFtUJ#eQ6p# zpiU1as%RW)mdJ*pbug8*LHVkG7U~i}){*L~TxrcHW~?k0$(H`*x*3dUDdQCx`oP&9 zmnCh5)x!AAOsNrl>|0+*7T4Cg(>sn4%7{ts3ek_Qi&TeA(*^GA8jgbJO9NTm3yr&A zaTjLMSXWZPbvLaGBv}w}7aHwr(CCPyd8F?!?{5-N&juvbji*0E&O6{Iu`Z+tbP}oh5O7we5>HlT>&QuH*cZ@0d?)z+ z*z+nD98VZtrGe<$R}N(JmVi~^Uiq{HL$@B%@$L=Mz+d}z)5N$9vFZ+0gE6@w$>Y+6 z?3h#pB(*(tsX(HGA&BFDY8RX+&F4(uSWV&4%^<*s#^FPoOE4NdcuF%GwF^M(3Lh{< zmshWw6Je?Bj_L?^al+k`ttHg8Egd^#Tv8rFQ1217k9Y7bbO8X7! z0i42ze#5xtVf6UzfrbZh4bU@S59R~EVGR#sOu&!FIib@8)xK(fH^o4Jw9oBkf;QRB zG|^sA=+eI{b5(c;-@q$a^B(A9R5^qJ`W-087{s39uT6067_M*qBUIwV7g5;=ZBf~2 zY!T?ndkE}|yo11@`2*@}3X?CWzGL&Z!QjidGd1~g=?lP{XIAmsp5#|i7Xl=m=_%?U zuM+zRe?0Mp?QKJUU0v1&8sET`h!*TLLv}AN_jp_*JdXcT43}wTqqA=f$l#0CK+3rH z(WuE8kH5K#9thdG=;zq@EzJUHRQH_UGn0^1j$iT5^USJ>%8si$op6Wh_qnQQ*Ew5N zprj%*c>+kz;i~myd-GdZ62XN$43pW%e!m9P3`FK%>|) zkLE(|V^l4up-t6t?xhpFIqs$KOlC9k^O8vvT2uk%u8Csv8}^LrZ4_N<>F`UV8wvdt z)IYB>h0m6NJ(8C96z(CDKUg((iEB0_Qf*)<>&5~ z6WyG?lpRiiFhh{Go*>;>OKhX`>!E37F-p5@-|bd^xiY1EnfqGE&sDZZk*ARi`zb$W zHn!k4*k4GhIJa>Q)K7D~?nv6@TAOZG8`T@QeHWfJa~lRS)4pKV@2SpZ5om?N@>A1y z?o-nGLtkEk;)F=LZkB9q$0{&&McW1qw+f^ER_U{{yK9mF3%^E_b!tPpO+(CDH+1S` z`4jkmrPwB}Dy)A5=z?!`jB7!aG=?@ow6AUvv+l}7DIjDb)G!SmEvAQK(B_dzLjkZa zu!+X2Y5mB+Y>=1lx|d=%Bz5{vjN4LS*ix%Yk06nt`#}&zL$_Na#Jow(5 z-8J=;1ybDV9Gf377I(Um@YEbfhSc4djQKQzw{~+t;KvA=UD1(2ytfT%`kPRmpciRM z8!|}8t%kg!v}}~`#4^2dz(WmU$Mat{bk4~3o$lT-)O8%1^qrp(NIq@w)cXeTrtD&W zuUC&9?hS(v;97#)CmtL zw18iKbM9v?$g#mKTMcCeeXp6h+sHcVGWocB2BAlHi_w4q(q#932K_uzbFPt+?5>Rr z7?Wx@ow04stP-6ywa*RVh7_OgM4tl;&h|Yb20L+O~%60Gc6}IDDAxc zK1s$}%dxX~p`>C!tL|E-O#(CsU`QJZ<67h_IUsv)$dVmUP5{KYCe~*=A)v*UmbS+# zJh<=bnww+SrTKU?%$CA8zgi}sR^-N}t&q)=Q7C^5Ewl`ABX z-OgzH+hSC2?AIc!iVCqTwMbQcPm64=EW7SD0E{dcz_Tl-p+xmitLosXg-S`W>EHeL z=j5DK=8hU{uSiB^f{Bg`J!f@z@*=}%#7-9u9s#vywV!rM4o(e?Hqd zrCr&~wmA)#g~D*Yy;{aXo(y4sx7V)M+Adq4=rt7r{%3-xcDwgq5cIg3U-sr1!&nhxX za52i8yMD%L)F8F6FZnnhF^u~G{C4!7N}H0N-a{Q#`beLetH+rstVLE%nO@x8*BOyQ zwkNsZ@7&408?t79#LbJsQjBVNXBbtoWjcXjz>7Mk#lF!+j!aK#WA;CTT1%I(J?MBGu&P5O?#Qb@2uJItoPgM1a+T3 zzfu^l5Ar*o@8uB?X*}Ep^ta9nyP~5%wR!#Zz_+vYe1L+qcQC*m$hncI?^=j>@>@4wTRuU;D5vc&V6M-8fw_@+ z=&2z~4c-TTWsqoB#O(=;-aBnahVDroiikS?CRoS6#6bg}4i5=s{2SfNAk`uczxXZz ztH}%l+3u6ww0gNHr7kO5N8iVO@Q{zM^-+6~mcC+n+nWbO=gx?Pi@)Aqi|D+5c4b`N z-^X>nh>;r;u+!pr@({1AzU!!ermOa69x?COC)ZpSqO#U6hvXq;%Ylp6?bILs@Lw1) zUwW5O9R(AYiVy`T0W!C<5Cxk70qK`d5(Pki=gHOS&K{IgbhKRH*Y0$E(UJ3hHQfRq z;O6))Wo9gY&_)O{s`fZ-@sqQ6c8bBQ+yxfs2^J^QOjlY37`WQLHQ(4CHc+;Q@MN`p z-}%nkap38Lw8J_fkS#MH5m;lS%H>9{Z3t<381Nht0hZ!cHGqw7S2NSKOs&~?pdoO7 z7N7YXN$gSx9_ z1MXLdA`Y~w_>YsvnF!+G7?xlO4aM=isxQ36?wX#A*K;(nbA1XP_3k=&aL;EGBHSoo ze94l+EEKkojEATU4$dvtsE#YZ=s?(ihbSi+&0X6_O8ugBTzEnltqJXE!Cnvww8n%* zXvi-{5HDgoV!bAbX@DGZ=fQJjCA7BJGe#Ze6{u;GBH#V$*9L6j$*ueJLapF+?+-m>!gy?o4JD}$-fmZEut=Q+*QNNI} zG#lhNOW`;*AkTRUOJQbGr!;pJpK5QitNDvPtQqYnV%9Ah3 zBm!G%XX;&=P^aq_<`7>0AQ3>YO$|zwKMHl+3vk3aC_V}o zK}k6+6Be;z4Nnz87a5JhT_EgIYH6>8X}+2zH083qic84QBklm?5tsw(v1@C(i$P%4Oz?h{cB|1z6q0(gxJT!NrENv z*N_DoG>vjZmaZ&pW%woKA;dT+WVp%2x~OTHTuy>D;v0v(jhkk-tb5yliA}~Vtj5ja zk`$;RH}f@MS7XC00UpNs;7N&_$A&SLrx~E2`b%2aP%@zKgZ-(0*+Ag&6y=eq0Dh$- zQRbn9&HBdTIELC$48>OrL!yj{A;}POP#3HGjHh(KGqv|Cv4LDEt!yq6NF{h%i7k94JaASKHcfl za{+N}Em0~Pd&Dzp^40rQ10d1@4JX}7(}V#PWUJp&rr5M~6pa0lpavJb0RpjE@ z#ctx1s60t^giKi-vVNWArM`sI-jERrwbX7K|+kTm8d!`*dpFRr|w z1U#;WY37cvm6D4Nh|T}vlNtgoGL9<{RF%ji8?z|5Y4Oq$g-WU-8?bMoQ)5h9Vd4$L zh!=CN%aC4dqltZDU0_v+8&ylb8iBMJVH^sgilAJ7JeGP^S2V>^QrcFf?t|P38{bzs zdz;*DVCRelTV=UQ+pQU18+Vk(4GVxRi|DHFErl&_UD03Oo?uA$2oH}^vt-%r(m_4E z)qj%Y^@;3Y*}y_WoYkF!3VMe&lo`jsEAa_`L=YdQDCQ_dF$ZyQH@hJW_RIdXqE|YDw0}KI)~zPan>^_Xi8mL#cA`R zLy{(=b3q+VW*i;#ra;S}q)=#c*S~8Y!yjtIaBq+^aLT(wxd~$ zL{RzFw8jYzKG+Fv-0d*7Q;Cq;rd3oxQS1uJXy&^SMEdOJrlwDDDXUY=WUQwT(1L3Q zh!}gk(0yQ0t&sKKc*zRHYH>XJ3q!M@K)CR>K3BlTPR~62eZ)$6N{$Qdb*zsttLy!L zj_iT!UG_zUEmN&4EVNn0-QhdeweR=X0|l*cSUQ8@{GF5El$w(STK+o?f{voR_|;Mt zMPAnX&!R%CbNq}^^BC{gF-#1&{cXLux?5DyRhb-B6z&g!Fw2ryIjarPN1ycISmDi@ z8K7mBC{4$p^k#hLgAd&+TvkBB<*i766qyfEeaSm!$uq5*ih?;Pr)ApEELUlrJ0;c) zCQSf^F!oXQPHQWaI2@EAzs;7m`S%8|ke%B1xeOB3&$70a9Cj?c93H`hdz;NHJ)1rZ zJ}?Nn_Kjc!^VjlqZiKrc1LTL*@8`yf@X4q7p{D&i`!GlRKsK*l+xW5F57S$JM@MHl z8f8|6bN9vpjc!jTtoQWZ*{kqUPpyHad=NF9 zn3hx&JnR;aNiv*@0Fn$|vlB(|;m(emv6>X8y-Ks3D}0Q1iNUtGX8)q9C>~Dvv@pJ3 zPTX2a+b8(1O7CdDw+@j4uLqZZ_g(nD`mQOQ(6^n+`$tAw7>qZbjn;l>v|VrO(4sK4 zrX3l$izJP0jGw$~g|LwVT!wa(24R4JS{(-i+(^<#o^XRGtq<|7!(`w} z6I(`nw&F0?wP^Lab0cAX_h?7&DML~ug@bmITkhNxwaBY8ABStg;5sYv*1fZcul_#>^eH0PON#T)o&rNGQski;FJR4bLm{l(fI7tu+w@38@oyWq(l z-loajC%3z#^Wr9ik>n}WdTt?G^(@|?wSRtljtzuO5ei_p(?=d9-PN#`!l>zy-SYw zjW)`hx7#D+H1PHaIX`*xjANHE=XSWxG-nQ-U2frv8mql;=ifGew1%&nosld<-_>Re zANYGVTl|LnJ6-Zu{|eE7n@$Uy#(Nd z0a(g{JT#3pQoVz-KrhYSt($j0+xX$Ys=~Y5(o$B3M(nHGHPm9yL^ANl8IBKqPGy@6?s+`o7+)hW3H_-?iME8+T7d)k-1tokMIr?P?#CMwLtN! zb|FQ7V`t9DOA_!i7B^^R6-|{E3AoH}SBS(R^#r!O;|}1?`m1r8n(IikV!7%)@~i~r zAx1d!GRLZM70!!gU@fKq7-MIIlvbEme;(#7`M4E+`^P#HML+$-{AVWWlEgnf>r517 zvpODRvci^39wA32A5Q-OMUDVNmr)%B6PFz!1v!7)Mhw39SLhE|(L6N+7&;Vf0`!(* zZ$%Hb*UqUZ+W&tj$sswEZ11j}Gz&wrG{g6Nd^p2DgBvFJbHnV1IoGk&;q(_g_yV7A z{P|+OZ?E|G`xn0X_uKIE%kb%Q7@QkxN`82`3@MJWmSN{cm%{M!`p15n+ywvPGUM%O zse6C=w(}w3-3$*sK7ngp@DW`2XP@YPGr-%r^th+Y7BowK8E~(uu&6QgEgnQr-H@1FwSthtMiz< z$Fi~@XB|67v}Nc~+#(6qI9!7-4=R~cA6s!@-E<*wNkhB*StW8Dt3w^iSYj0&B1?N< zhNq zTxn$Ti$Izh@Su_WoOB-1r2xEuvT*a!0K0>GD8K}?AZVj1dbxReC@vLdmge(kGzb99 z0gni3(2w~K)PM|rX+E-80a_r0xyyfZupS^+*I^gyShM19v2eqphgCcjqZmbQ{z#_z zX8;@tkUCKyzV)N0xXj}mXRI1}G2t=Up-rnF6J#BD`RVgtZusTz;Vb-Y%ZOX*fio(^ zl?U>*asu!myiY(mLner4kv@QyX%dld1nD%55tGT9Sh@fqCYWB~KJ)#BjYWTNBYeaA z&^5q#(* z<62iqoW;?y)R$%y_prFU=Pf6si>q>AwTVzuJtcVyq$81r+srS|D$;5xvZbeI+M+@# zSKU@vp0!3~^9x(^q>CMMpSypE`M45M{NVy8 z?G2GTV8zsU0+u3xg5r39dH|hOI=|3m=0IaMCt5?QM&?nQfI$@W8lr!36{5|@ETki{ zmYoC_ykxZ-LzVtSPsCT##!KqjQ}Yx&Xj<@H_fR7Wafw} z_mLH6{dQ>nM`Lkp!bPFeE6uXnzwrWEK1Y((9*xw=;8AFipy>q{66Q~WicK;(%NfP4 z?Ao+VFxQD?2U!{F=3M|6genDDJiWgY+MOxX%}zeg%@(sFKm&hx%?}$0P%DY{X%ptj z;6!KuVI22e&{HUJ^pa+cNs|`Yg7MKf$jP2l1aCk75^sW% zobMmeveq%?rw+T_snAWbh?a*Id!%_G=zd7H2*5kd&zytJ&a-^fpr?-12)IQ6svCb> z?+7Z>B2Tr!nX6=Irrf4VmU5wN$_0;Arf;(sE+vXI@jQQ7rGeTi|KmQKZFrg89GDVy z3mijqz%SRi1&yCCOhUti!sfz($mM$@siAq@n~+am8S{=@HxgNGW>PP~S4ljd>^6?= zW{lf)Rg=Xwq{o(M$vK%5ZtCX-lia&~3$dkAFNEd?e{52=;K*J^S^SEgyk(P($!`{t zwo`21KG1(Dwz3-w-xXx@@fQNUqV9$IvdbC|%ASv+6x8X`=~2t6eUnt?&NOyRqp0{l zNGj9z)csW}nxxJ^NgwPMzc)?I+$yYk zAf#|k=O8x=ohGq+FsdoFMYVprTY=Z64^x}mZPtG{)Jc>XBR1OE1uEY0b~u_HPWR+~`8u?CfnD1Dl-!Y>fSmT-A?pj$6rMcw+|?R&n0$ zpr~+HP~}aQPgd@@U3uzNqt*#`G+fU)z;VUQt_=Aicc$>}U4c2E=zDhsc!o$=A(?2) zQw)D$VksVM5HocaxsO`r)zQdDhHRV=r?|!J*5omzrilrDZ<0z7p5cw-E&W+S-VuwzEjpVSiWB@@I?I^TmIt+56O;uW^5EVLh}_3U)IZ6gMLVwgKzZ z50(U+o%s36lM0DD8Wf~$SIo17Z7a@98lk9jn(JTvGXKOxKTYy)3B2J=i_!V1D}S!~ zcT_%bBA6s?Rg(zFgb&2hEy%`9oNOjuV+D^I?qu8+n!bg08zf2jR3A-jf+yY<8j4jp zXnU_`TAl3;!rDDLEnfBF?q-d)E{j{ZMH5_=?dp4nW${ZgZ9hyl9@-|?c1IfR3EUb!Ra?t6aT4i&t){r4udI21T}(e6B) z7q=fbY0aTrQ}mzPKW^U|8+H2Qw62$QDg`Tl@3%kyP2Gezf-&;;{dtq-JVbPDL^y=E zx9=bSd_7P3IL}kx9sDca@8LDQdy&e-&osOX^)nwo3-GUm%fMyfQl$*;6c4m}gVJXz z`PcWq-~Rd?!o6rxXg|@{w3ZANr3Q6}x19+UbvASLmC(njO|(4^8+5Jy`(30u=Q^B! zZ+9JQ`<9E~txdJA^`KZ{PoBoLu}~2ke;p8DBckW*Y#dp0ZzzaS_f@8% zUHk!>GsKY*ppojp5a+B5xZLbpYj+5LAzI&5wDGND_vhZ7efv(6lV77?lu6tArJ{{r zqwL{;6nnpL`P>^+kiYZ+P_= z-U7%$na&#)ZM?Y?6e8r{Es{6lQ|h~r@x5442E9(;nY0Y$wrasT)lsGtv6L}?LLEVN zkSU%y$dJWA9hNa@F;VBLD!Owr34N<-a|WnLJKafD@DjT^5NfV4k4nY}Cb@65Jx4H! zTb=N#Y?(F#%|JrlMg2^EEFggKO<346;G%^-Vk<4=PTocUY}J0@4eF-kLg46alKfWR zUugR#*^zP~e2QX3!B+P}6ivc^Bw`RIWmU6lNDzW@=6qp<*lSGHA}vCf|Cj0E2;ljm+5trVp&F z8BUiY627h$;Cim0LlF!d+C!(0Ko-P>6?D+s$e}%S=K8v(o;E2iRyV!P>x>0=D3Ad~ zd+zjsxVtcA5qH|ky)+0y8YeGlsuAxwFv$1n-6E{ugz=5M+QX^Whc4c1U1a9fz;lHr zbUxDRiWzCS9!*S!MjS?eQc)4RU?UsC8Dm52((>>^bT})~vOFV`fpF8B-=F3P%EdK5 zjB#a|MZW{j@GS~fS#a}y$seVWM5&t*ngm-X44E>gVqI=%5TmC}fz=iObO4NjuHsn4 zv=wn1Z6>T)$pP&DJjv7aWoXqMf70}|FG;RU@goC#=q zeD&do(lG7B0U_G=bv}iS87CdMbf~;r$r;0*6h3JN#jD}YZgZ`a@X9p6ALBY@7RRhI z$z;&#Ra|)hlgT*DXEkeoNMW;@p~j4wVLJ0VeRX7+{K|k)MaOl6%i|I^!QEr}YqDiC z8K+m%_Slt%Nqks;-$|l-J=zl%#x+Y-Ce6)tAU*DC+!PYy2IG|?DV|ZJdqo<6s#MJk zEfS#Ac9;H{w3c1Cija$lA z2Dd2%N&BzmC1)bGCN0mL&8A+F>l~73g7Hnv;ny-?qk$`bEn!L#j~JMEW0(Gzsly_M zOa|!ih#`}aI{dVWHj{GsB@o$+>e@@mI^cI`ay(#1(uEh#WaD%u5!Yl=QdMN8j2|E=JFZYN&wD+90z zr|jTRidZWT= z+2v<(8y4FzjZ55y*}24hn9k*w_F>4~#MC`NId^HlU6;mm8Z?NuqNPK^@r05YccX_3nwd}<4)Js;yo<@b0wM}e3vDB(AI0Ja$ObH zr%p@M)Nm*GY)LbO8)$z?NJoYdwNQjcvllmJv*BnEmCv%G72q zWleU-r!g26m29HIEM|zRJd;za>;=6|lwenXHqk`(M93vP5M(&Cw;d6(Uls^t(IbKf z0$B`<;DLZ9BO}-~O=B_$a<4uK6*0K2?#s0DjthlHN^xP~oJMZE;c8wX9bqV=*!Ifm zLP`3rsnzF7FX(ZU&|WXS$4^=li4R(<`DT-bnaoHO7|f`gy-fOG%JyW%npi#5B(I}? zf_S-riS^x6fLg>0Myn&J?nFiP%qoUV1`Y9&A(K%>yk^j5k`XT&vKe)>SB(nrkN>?- z0Z|zk!la+QS}sGtxl+@dE>Cum!YB&EnnbpjR2Noy!1CFxoa#xHCX)YSMkkeF%##-P z%IjmUi-)D+(A^|LK55nZ5UShVuSL9nyFM=*R15oWDp@QIWiel$V(1wCKc`z zR}=ryU)UQ?V_0|K9aC3&9Dqh|&0v?;Mtw@$daGIRGTo)hk2u-0W2k(YU$4&%(Rv&` zQqjgEuEz(D(=p-pP%1X0y>3VbWEkDVwmrzY=%5kk!9JbBuAOq`?n)JKg|N$i6*mSp z(QS{iJ}}%Oyf^V7)u>eHW|to;Aj$#B)m9+|J7I0lu&EVstLi}yJ8PS*rU3#PhBIN0 zPbD)vCw+MbXyO*^80gt10;D2W&*>W0$nheC*&u=kCKJIjlukCVuJxrfY{TZ z>l;<0A{eC8BEP103}-^XUhiFd)h7copE6?AzFS9NKobOb#XGoDb|56cDHXy` zpO-aLrp~>;IMZY+RfRaW52ZJ zPvK1HVOLMlCWvl>uNLutoDudAwmY_1U9+4alYu-uXUJqk56>C2nb5OcJvk`!(#^-< z`SnWUZlu;0QL{VtH4wj2udeN>7Wi-%<<9+1In_|KHGC1~P&o$!;0fHyf`-xYlKC~i zAHRP7IwcP=eVcTDE{B_HrAsYJwe1tzE)F_bT84_PCdjE)Dco|~X zr!Ok~s1%S25Vl=?_r?Ooxe9~v^dp!U2X5V$=fri0#HYlyW*@mzW9OzZ`dLQ+{3l9V zrFNnZJQ|k~5pPW{ZFvQiTk{Le5Zqz$=x00z_)G23T1)Rny0~i0P!eLq20xLtay}W* zjo9Zq1P9`X7-Y zyeF42-vtx5`!xk`sed&!GCn>Eb98cLVQmU{+N~PNZsW@Fp0D5!xL@xJVCWF!Wsuxn zGPfWHS*CJ{5zM>f_fy@qu((LF#=(FilkBRlu6^P3V{(&)e{L#%D!G~3rppIB_y*U% z==!Ga*S~-KKK=6NFga&hN`Cr&onC?oIZW_>zkmP7tF_U>HGiM}`Teicuix*0x?pT* z8r0Wt@)mxxKe+(EDZ$?be$Q~#(~A$OKfPKX;Yt^Hd+n>o+lL$aY-|nF3vBGOV`?vt z0i!da<~5)%??_+jyU(Z62`fkx+`8QFGhDDNzge4{CO^&a)b)d%+;}#hV*h!A#}_tQh27#x8LzK8+_c?*;_>&vVp+ zB9-tH9Myone3Fw-5EiqEu+Q^^X+U3HXB4q84Q{<4v%B~Q!Q=J3lL1J`ABmSvHH%Jo z77FZT@e(mr`73tupuk|i6i}i$@q%s*opr#bzDavU#eW$9%c2GIjO2}ToJmdI@P44U z2z?h)c2@dGGEvW$!>%9?jrFF7aFdHB#Ej0xB@=9!UTQEkB@$zpJ2YJ3b69*eDWo+L z6saHVbe8#fM%g(LC>b7c>xxgt`I0P;ue=D3Yjfr!1D;nD_4rMv^eUXy-r$US(Rl=t ziDbE(MSp|M_|l)qVT_;18@pi9^@8cT$iP{XFcYG+%o2H!akPrU$z`y0>+5|o%{KV$ z%oRU)$d-NrFcNE-`u-L?T6;y$R>)3(%jDHW@h<(TV{@6c--E01+u`5dP>GXr5$IZ# zfugbzR4u~lm$88bG zE`RZu7l|d}afu%o#7}|LbYQv?>n^0Utff&|SqJQFKRVS&!mUleWu*R93s9R;dN4BYbXs3d_ zV`S{0H@Om%zyW%DCmtO*Zs!`LLlsUyl(Q3Tq@{?@kIfTr3Rc)SNwJtwQs~hRR>k~E zHaZp$T8rQYC#{T*qQMsb#!QCj5&WSUA7eZ)=at*D8=L3!4dps784+?ly-K>DQGY|% zZZ{NTz1yhCQ5ria%#x)G0koR@?rCP*)tzdbXUIQJAa~7k%C^8 z=}VGJa@v*q5kl_65zVpdmn+>ZH+M2B)R_fZFT#*G(e!P zD=?%%jH^swe8sv|`M$=Lz_dnDmf*Ugg~j|6_<>0- z@6g9gXuF~2ejT<5G@_VI-5+`703dd?kv7ctlsGlx;!1ubp4;+ckbj*-zbL+xOfAwf zx&Dm!Ov`SI>Hj9Y;7xL2hrSD}knqYE&}ZNYWV~DS-N$)CTOR5~?fvmRl1*f=P|XFR zJEi4$JX5dALj7t-e2TQ1hesf=~iiNy#tyicvx7A8Owwm@uwaVF))TGn@kcBRo zP}3H0uxBT5dhE8QdODEY9=Z-24Ve3uE}M3$ z_AFkgwET`y{teGKEatGc{_H+rJ}s0T{nzL4{_O4%jMuvD?&(a@W8YA|dP+ba-EJQn zzlygw<63wu{R7Bu6gz#kpquWl3D=Qlu1uIr^tKHP%+9R8Xn(||m>gwX;~t)xBf$zT z+k5A2kO%{ZKlUuReO`gtvEYm6t<@x7_`Lq{c_ndKK|VNff{bu=U^>t3{Iw^T)vfYZ zdUQK~6__PGy#cdZp!3(8Fd_^(&Q3fei=)Z#s?p_5?v4<)8zNlBE<9-(HNjO)G^iea z<1T-CuF2)WsDDFSnp_8^bFfiWptnn0)c`6>$A&0+KcY3OGALd7$-S8X)xeIMQG|WQ zT7H4ojn}X=LDCz8NGH53wU&^Q1eFssW3g&Av{era0vHqzo32P)W<;aI;)B{)@sZ{` z%cyjef!M{Nu{ZUku$+CP4wAh!yCG=nA+|V(qAvI1)qlD^3`a!sXI< z8R#Y0Ej~(A#m{_z8``MEqdNHmBHbBw;W7KsvM8DAJL&HLkRiJ57fvCl4khjOPMz$f zZFtm(UK*Fn$TF&L1^nt;fpzoH<%7`;4YOG>WR%Tj1XY)`l~$i6=m|k@STiErB`=MK z0efEN5`U=n(w*J((>E>tg>2R8q9^=qMP1aqDru&9xAIEek@t09lt@1K^n%B9m4*o} zw_OL-<=1^rTG`od?6d3dt(z_C7_6+rK2%rcU>5#k3eg&us&AuI^1bLv0g|KKObKA+ zxl<9wH$cDq<-<>Z`j7JM`>!Jkln@nSL5|KqLVwFn-O8v4jjOkP#whk-gQxj^MItWbjNY&V(NG5`-FRA+f9q|GmZ%NeB_As zMeTz~noBUPaU|^xav7U%`)(~h7doLDvNf)=a%+E6&>}6)X$7y z5`V8=y86;jMkPU*j9+x9XfC@PG?0~7ev*{HdeNlA>S^69?BEn4ZAbKwt+d`-IGp~D zxwC3~Yu6G3dF6cQH;@i=v?D24&1XlPTDr<0oQN!Yar8L}k4R+-up6MvtLAQ1pA|hT zm2fzt16o8o!czk}X@uXM(65o;_X3~$Vi^(0F%Y|_mlFG|fEz+_SC9VohyMYZulS0W zG2aCfmvia`Cx0Dv-*`jLM9B5%D6j)YG4nnKb+}Q?gTvMddP`|A2;{ z;QC#zpN8M(pMU={{qUokj8P>7JAJuM2div!lT!|VzkmFC)Y_jc(zvHJn1%I4P`bnm_!M4r{h8P)w62mi2a$LZ+2Kf_y$1T*;!9*2}lPw})&ouXg z7nK$KbfS}sXeqloTYd7igTotk`$nek*uhH&nqF+vt3yNAamcOz11gi1HFdE#TSY`I zk4$wLB&sgu$~{Pnff0fdQ3gJkBm~)R8j<^A?tkg}xz3|6u&NiX^C+jy(h>l)FSC8B zrojicL6QwpxdBkJ)&HFQ*1~^B>SOwh2#VV_)@5ctz!_<8(B;Cn6 zyB{Ow;MkbaQM5baikaq!{cz*E`>fMd^G#)WOmVB27@Ae9(PSk#JIEuo-0s8{6! zwJ73*NeU8fZ|?xw+S}|4MQeRzb{#o^3R@dI#OEfNR{snF8MXP>1lGFEE-#AkGme6E z*?IL)Mz`!Ci4a%y872|wIG+Pz|0I>9LCZt$b|JUZ&g9tXn{9}fIXZSquZyq>FFP@X zv}9wVvL-T>Aq^?LTC)-W`z3(;jUzwAKPE7uNH+{s%`{+z+3Pk7il33u@pWpz!R6xE zG+cjHaNf0}PSVx#Ym;cJrCK|FwF6_u+RxsQqC7m7Xj)odSX-jI%chmXad^rbLb1<7 zjzpw$$lfsmZ7X3;RZ{QpFy@0uq!s8XScCc+<^c#{Y?$EWu;>FY%nDpz>}matuCxQ@ z=HyvB!pKxPkKY(60y8V-cUxO!vVw z`(wBL&2hPuaN1r~Nf*Y+;Ayq#Hzm8V8*3cBDgh1w1@EVvF`7a@dKEaJaeIp0+3M&t zfM5&0LA~^M(<9^G^Oth#e4(9Ix#1-Un+pzwET&dZ42*-6s3SM&7ni^dICb{HI7S%V zTVB*^8mweKPvWfl#Yyz&8fl4ekWo!?M&)<2oABg8vkx4gJT@(~4SYyqHUrligj3i5 z!2J|shL5N=hGEBr-0iPZ$Wp(Q_h)N_OTO5deJl|hNt71wBm|UvB|&bpr?ArDOWr$; z_9bzOeU3o?E8)16SwreY0vED%Ckr=yizGu++iUJ(jPo9)nvW)?jKoXPW1G&%+?uV| zUzvGoeLkN|5!C6o4|0l=_dM6?BvydTH+uFuMAhjT5)vc`+`U&?>Dm5#1qEFSXM(dI zu#Z6&6lw#&Z@wGaR%Ey7@Zi=@~0@nR^Bg4IH2_E)r$d>xr z_TSLmw^gGjLh)mNh1jckfev9GKWfDc-5lxl2^Nx$oFt58MzSBBgzxRL5&2HtwZ8Nt zpi=>~h+MXPvH2e|6~=hhJd!M7=k=&~|K<%qwK{OI)R+FA)9}+%{vL*mv$eiK5bx1ODoODJKrMpFD(_O7TFaKGuw`LvR z(e;?-fp_WuR2XDy-7zev^A#C^W|7||&^da;xH!GTR65ujk@ z&{fx(nU>B-A%InRs{0t4{62iGKX@NU)Be7+3W}hpcZ1kM<6+>&ha3EJqDDbpwcEP~q85}mbVuxk(YWJb=$!T7FumxMH0zuM z0hJLs&bGxfHwbznh9$%Q*V4|w<6E+(h8B_Yozv{9Zz(5%Kf3#`H||u{*en~EbcL%1 zD|jx5WAKK9?yDPD?ueCD&Z;edpnpOK|8ql&r9=j8O!&#WXzMAD76 z$objH*~-rD0mwgA|KdgPdwcOD=DE7S(b5cx{r`;>a9W0;M&-_ayb(%^xJ2y_j z)Le2BKHi7)LCXf+eKIe-u)9{m*5TULnwg z8MPoJK3rNOcRE^nVSp{=U!^FV1sYLNF4Yx1&YK>BmA=;47TS6RCC`WbUo>8gsIL}K z8me`Qnt0s=X5o_TU9S(S;ghMpBfuyVFTE64MCB%5rg4hLu;PM zB{b_Zu}GikU%5TexVQl|v2!pikS2XWyCwX^R8%>%uG>}x;bqH??<<4cQFvxmKZRFt z8WG`#M7_dZITUbbSpCvppED0Ex;vsMG1fR%ecm@aMg{Hhz6&L|wnEAPr$6_du7XMwJTCj zov0E8DhCmzUv)`Ok$`VAXMf#DHBIB4nrshSmrb} z8FbchQRc<()p5^g!J^$eOir&N@4D|Vt8_K>;r*QrD?s~28PGBAI`1h9g=zc<24b^z z(X@$VSt2O;rmrUR1=m4E4B3GQOYg?fYjn~SY-ZBjw%SHOd1Sz@s*>1{zqn#Ms^>4u znyd&`dPSK-n{Zbn8}p=sd=eJ$&I}b=%B!t&+!YJ6p;9+shjMc;g+<(5;|G}Cz6yVP z)xSW#F94^hANbulsw%%EI={}9=^)@Pkk{322={PzvtxdsUa!3aTh(u3Gug7nU{Yhb zD)T8CJKLm{>OnX8YOkzaZL3r!rO`bMZ2XKAY>1tdEQaeZ>(-JD`wFAiw-@50&bt$n z*pODJek0(En0qtMqM-rlr2FGM_5*zgTc`;wMK*U0DCVmkS7^6yYmAG15`a|0w{pM+ z!w8*Tct;I-YDj&rDdJc_#MBigE3N3)eajCpx-eH-3UD68uN18paB=`M$N$=3rf|oq zNm~Aq+@}OcQ{KS%E>K8_yBS$+;G7bkO7v*~&SN(vtqr4Q)|R{@n2$VV8LG6)a%w5b zI~dIhuOsLK7zKEBc5R=&I6J%V>h1pwbO$>;DD$QJough_K%5*MqGVo1>eFnl1OM zLICY<9YIZKF8L1TNWlm{`WdO?=G3rT%$K_~*uukIGNT#w*U@n1cP)=x*x{8Yi9gjh zPj?1mbcsmPMT`CE1t8psdOvbbj~#InrNTgV5~oPc2Du_!8}v=jzg^Yx6}ydo?78i za<;8yu0buzS~%(bU+Q>}S!l}~nOz1n`iaA3W}6^~G3bV7G9E>?qE3NF>oxKAS_5w4 zIQldEKmDcjs)?G5mg5Fvc0&9FwQGw^)a#d26OLd zu3dq5ApKtMFp)pE7H8crR{PkQtduGe^YQku-w1Yd(mwTNvTDc!aa^K*(yWw$Pamyw z*fiw|$NQAWKZrn3Tq?L)drPHB0A@H?*!{pU;YT+iHz3R`kv*oxDQ{u*dhnq~mYhcy z6*OUQOhFrKG@VR`QRjGa+_$MFuCl(dU0n(Q{11O*xxbuRDX4f`V@&d05=N1uWQgS zTKt_p&Qk9JnyqcU4tQDHQmTB|ysCaHRNGRs&Y_wPk6lf+IAZ0yseF9KgYuI|b5-b# z;m4Qsr-rYzRSl61=sMUb-8=Sd6BMKBS`tZicjD4e0lGClq`D`rXQ@ z_8gb%y8l<*z;YtUkabIo*)0%sGA0iGffXaw51xBva*y17#cXQj!mx0=4b*K;+ z*D8R5QNSw9J>G801E6GZ9#6qI;G0aLoI2@SpY3UF%)(f$-H4W5>w68WK~$sTzpgh%=sCt7tgG81Qsid8)Lmw)7gkKoD7eDI}wWjaJT& z_+A!Go92zw1xVKN_1w#a=*&T?7yk)@WF;g4c)r3|Z#yf1IXwfnm+U6G@NxdMn|@(a z--o$~gU5gu;d*|KN%0)Lp!&>tRFgOvh=-P(v^ONLK%!tFVStUFFuH-IqREb~BdrB#wc6v%;og<6{Sjd7ULgM|99T8nXo=nDx>r*mhuv9yJ}8&i%owMV0< zy|5|C!qU!6sn)}@pnZG_qmQSNB#sGIU2TgV-Rqagn6c|IVlYDm*LArogWqNUsR8mo zNc!vB*;GTaMOW%@^uDhCeC2$iZxHNWThrRx2Y~aNVL(%1ymT$Mu+SG7mrk!~>xHvf zZ8Nh4!UNRh`sdwLV#5g^fHBiqY4O}LQuiHVEmT?F<@P78_rjTB&Y~h7Gl~*>@CL*# z!%~N4RN8Ws)yNI_1Wbsb@15!n_S}7x+aR&U(q6otCd2rZ4kDPe6OMN`nVk%w?AfMV_uoH;Ic4AOG{P? zx09vMh77~no$XR2|IVJwB9rhFH^NRaIp|vT$Ogk)v0$a~r2sb-og}ZiP){-EiBb{< zHi}hHXcT}MR+si)NiH|eZi3a3r9Z}50z|YmM>wHsLU|f7EP+#`QOrh!_2gpTpU{?7 zo5{dcUe+*v-sv`!X%|nU+}}xIwJq%A+7M|p`-)uU!F^VjiTjnbVJl<}FRrxR%KUX% zn|x%|KKkY46mCGJATp4nfZN_8Cx>Eao&R-JUX+tuaYWS&@`8?DHX}t-3(fJl`gGA>oI+*dEx*np~Q1RMHfAXo3kHOBb8s^+PPhg_2U0iCA5Z`K&&(Zd^M^Q9{ zGV;nH2xv(~kPBfve!p}O*hW)m0~F{b3lEwoEyJ7S1f3xsSpqCHyPq88~SS%M> z=eMx{l7n>PO<>+c6Fd&I5!vd6U5pUFMMzClJ~oiPI8Ej@gI>sd?2^OaR)C6ty3%&ptOVPxRbRYtm`Z_K_rSnhOyT1S{l(id|fA_wWv02zj$_Mb-ahAvLhYtV4n*y1%J33NF!Fit_- zoQX*e7TOkRTQM-TZ_%=YqA}!JFIL5I0~-J>%ow4zCc(~9W26ojL4|JM1!#TvMUe&- z|B5hdX)9NR<`q(jCg;{t0G90Ht7_s6RfNeB0tjM!9X0O0$3oO!9NRn$RZXuAuq*1M zwwyL(BUy}jO8cs2E#FBM9wu`}n0JAA;I<}tCe&91)12FU&K?2ZZ&h*XuD?_rxWZ&J zCp5i(u6=J7{qG*EJ171Qq{3q3@M!xtVJ>H*Tn0cOt8!Vfjl+{502aruZ|*5F-KX*5 zH$jJYF+h_Ou|NvPAn2v1-Ai3=E7_6Hf0<*5$`iY8or-iiS3pFvm>GL>WmnB^$7b8d4^R`GT?Fk;f2>Z2JB(lW1pR23D2v(n|Akb#fn|8R*&g2n3R#wP{$KfilUR6!` zBL*T@P&vEtR}k7cP9HwV=V6u|7p9jKcp=AEHk<_7srG- z`lBd)*Eiq3z>4;*Wo${R;|Fa%1N{NlaGnb+JL&k5DydG_zXPx!SRhH9Q#Vm`k{349 z=_%+j*tC&27$J$1-&nxSQaN)%$DD$G)xH1e0wWD&^}_@o1e~8qCp|1M!eO05(o?}k zKwyRYQ+zfXV>*|ay5`&sv6D)_$+Z0OWtksNnc0W3nkc)ds?w^wTjv->nB~+lJIY)E zH#7K=)5E!~G<)|ygs4C^SYguMrb*HS(f)Ku)CeAr@o01QK~41&<$g1SS3GKACiV6w z!o2?}@CrT21N=?zn0=OzP!@v|W%Z}^ePcjFO%=4@CIdSytX)W?TPwegF{}98od1o=BsOP`YE6^hC zg!oCGd3&UL1~>pUbn`t8be_A7MKP23=z9nXL5hFGRl3Fq!-;;Afy$1*@&*Y zXY)av^Ubb*$z86k_;g?m6>Z+MoA_LOGQ0MXFQfTggF}_8(w&pP-+evmf(Mas|LuZzc*nxy8$z&`hfd5ze0K4;^JwSKpny`OBH zr`b|C7x8`NYe8MF*Pc1$*9g5t>gNci+q3QopeE)BskaUi>yWA>fEptQ?adJ*91b%d*S|m78Nh^^+09jpvIQCuF-eVW%R4 zCnv=_9w%@mX!8*?K=O~il37>~z@W$}?YGVK!Ygi`24jUaz+PUrPCW+z&+?)|$wzm5 zL7d$*8?^BoD#ro2sH+AWViksXtZ=-VQ7D}SOK2vZlEt2wB7Qsr$1+}0LBmT|CCy)W z9LPfPI9Nr0^GGLq^w-~KDu(b^#jE$@GN2{+MF~}?IOzQgfL_@ZUde{jbjFMMcwgq@ z^U>@)49S$=6DA$=k+M z%kZXn%Q|=(1Y;sM$eKYK5vaewPTIt%CG3uEH`^_=7y2;$l`Z_Tf#{+qPUYW%lv0(^ z6WxcPc7K^zz$1F7W1Zi4=6NToD?=>4V7hItxsFby#F0Su>_Tmm?a$VFo zJAdD8CeO{sX(}%lkd7kBh@@d=^59DGliX$|+Bm*n6b{=v@K)tTA`R+i@deG?Tn!OU z5+k3B$qrYSB|9XH(~vXv+FyEl!LT5-S=E+OkHDH~z!v;;7Ym7P{%ESH#``0Wk867i zI41>}P~ho7kh+;@T$-lpsrwlh^-f=^)Vj6ljOckICWclz)1Znts#Shr42HxDa%pVQRf$M z*9~TjY4>UFNyO%Z_D;<$?MJ)($R4^Y;FI=_M@7sD&yu8sjkWI*>6}{VY^JQa5=Lff zrm{XIUMsBE?z3>k3FgL;SY#j3qhTmL04t;w?n4=czrXd1It`^gM}98L+zb(<>8rT> z-weXaNH_XA?s9_8_*yi{xQz||iF=yn)vNM`egN=QNqT$}iz53$hYz^yC;LG@bUrR> zx4^1XllS)7kFj!@hjMp@hGC>GJ3;!vS5cl#qQUu!ZiLrl6WHU**hi7&Ak`FZfR<+3 zX7U;*?hPW(UQv$T=Q$;uOW@ww%lsN5tz~L2XplXs?@}&L(cnuy;HK+DR}}a!tIAZ&7|42{SVR~4kpW0^o%uV zNUneeu?!RVKt>HTfgBHsg&9cv0E3@cu~DB?nU;5HSu7^k4x`(NLV(KdD_?k{hInym zf&x>&DB=iRRlu8u1XHDkQ=i5jQlN{ig&}^7oHJ#>V$~6~Gx5t=g=zGOLiGL~Udy5D zYCeV_o|9^TX~5Ms=snlpgbJgh5k&BC^en4eT5fuTq5^VF^q~EV=QzkcG7T}=*Sws@) zh%JiGkqgV3Y6MbrQ3&dzE+Tlw#}po(wYM~rkqHQQ_rtqVbURZ%xxR2f{`1?}S!`f9 zM|**&_JN)|EAx4PKw{bfumW!`WUKbVw;?E_cIT$ceWF8zKa0pKq^TpWXC`;qf zdZ)Ezas?Di@L?L1tEO^aPH#P-+dkjc?|2{%Cp^@`W9%XZmU`w2gaRT`89eGtLA=?X zg%MNIb2{tgm~H!$Bd=TWP~1?FBe28fb`=!qaXkiuIc?6)#HBk5@XXJl{i8xt5=CaF zy4IC^YlHN0DPuuqc#7+^Q9sIMznd1yhoAal&}O{NU)cAg5rB8BJx<};1ylPA0xvM? z913pJ2@(#w2tG@#(P$b=6$kKgcqIF4d_qkQ=S)IY*VUxSZWgr8Bm(l6(j-vb<`f{1M4{((CYI`((Zvda7S+;uK!oW3RdIpl?G2G-%z?AU!v|n|J z<)KJPL;3y1UPzQAAL7#pg}TfG?XpC@wDPurjLhZl-_NBefV*K{MwjfY5vG=Drg!BK z=y$XXzpT!M;gL7^N*(n_*$Qj_u6<+Y?1wR51HX>7Q_~%XrxXoe6ukVX3W{V%StLtl zwBCg#N+ZTahx$`ho?+QVhVWcI=s?9DV_kNyMe-l9sRkg?r+jYkb&HVLNy4rer=ohB z(o}AdMjPK%A$>pVkJ4`8<@<&7?!D2rhcvkii`5P5X2+||Do4 zJ==o|oEi$Eb9GfFdbn%$fHwl}WoWDvKeB&*(S3ACN)yKaS1VMdJr+&c2H*8Ta}UWR z_5p%=Z_vx^Yj6BAb(=?>(&mo9jPcV=6;?qtp zbL%|kD|@*1U_KQmu56Acb|_r?Dy8V5&bzm6Ti-19H&T3qW(!3iB{{}80p^ac9Przx zP=;w4U>(0aMusIs2Hpk(%jB!%E8w&?-Xo@KQQdkzKQ?yc0UyoA`vfIZ$A|Ji;Kcwk zSX>qD+T+KMG0~o(e{&lk_rvo=o!%jv_Ls|?aH6`=z9;WbJ@!A#?3&i=4?#~T0U+6M z%M7e5!gHZ7Cw@z%wuJwtL_9Br`$~S;mWW&36+8Ghb>=jBFt}xzc9pNRX%hbz?!-rB zJ-w{%YGTu@ytN5h?EqSGZ_@6#gD%pZXX4IkAE7Fr-MYnfuP#GMGA1M~2PY(I6fyg1 z(yEL7hId>u^@>AK44QOgfES*-q|feHI3zk0Zc9yrFjh@{6$7wndpWk0{@0h!T*^Bp zBsl=I`X&Fj)Bv{2miB7}Lpu`Hs#dDB>fyRODp)0TuLX(T?}BT z$$|fcH6O#Pre5Wd6c!@IcI*(LDC8OT#auxff8gC?tJG8ExgA^%RPpf6qM*1muS08( zrf>Dlrl_TmBA_QT%Ms!RA}Wx1n4;>94~R({h?m3qip^dzBdKl5tZsyTU0e_LhuBmS zbIRcF;PDomOaCscUgdi`bT!}lPCZ~?iC;zY$iN13H+rFU1{5rj<;q-LBjnB|A>jDf z21rra0e`AuTsP&jtfA74cKU^ymdE;(E%Kosik_6s*&MIM=Bltkm2>LyWtBFMFZMA` z-g2UzuF{0xghOl-maLObSVY(jv_}Imu=$wHt66Lq##w(PdW+r+mGaUHD-0m`qCL%T zWC{WnwKc8&+@)TDUW8pF>3I;LXlwCEQ zF=x1E==d?Kb(w@^r_6dsZ#PF#e@D4a>4~Z!TiNXDEZI7{ssSH3-o@@3K&9QLlxll9 z=QQP4Pa>UBu{tD(c=`ozYYsS#9Dc@b8CM?UV8T8td2OB>r*l>M1#(`8p>`_heRVL3 zF1n}P*Oz}1ZJsW)a30qs@=V)J!g@wTIt@7LbPo2GN)UnCxr+8?Z_6*aZ-G%tc1#ZV zxPGdjN8j?Q1Opx9SY?D6-rdUxhO>O=Ec)PiV(v%~4ZO|Y+rB%c)&)GviM+uNRako| z^v`w~^ItT!T}D_^sMFz>(FsL!bv(}l&95#K(&$@a+x5jfvnYc?K@*~mvL5i|uCY?G zST-!74FRZ(y8}RCaFdc(=S0?$KtM`2n4w2~qy-TxMuzZevMpWV-ujlzLHA5^ zm-zW~d1tYB7us+oDMGde8bx(`$ZQ_67g%B>yw*WMwD}34yc4>6+U2)kT zHBS7@l-`~XH4eh^FCNm3d>EF#Lj8|o)#`uACJsQee!__c`a<3drnT-SfTGTkDxYGC z(pJ$m+2s=Dhkk{KAjf4Zh)9@c0q{gvnqQkkl?YNC<0dj)WqR2-kDyl} z3R`3UdQX0y1b!U_PTxZUCE_nBbq_O8Tk&EGk9&1uH)#Uy>qgvI)Jm!qq$`jTz1;~N zdiWO&pb!u!egdrINWbxsCJa&6vMB{2k+j|XXcE2nZUKvw1qlO5CX_sWKAQLrJ?H&*}s+d^;8H<*&}3+S@B>zGhp z>O0DP(=W3({~Dv0?#U0>yx(UV$0U5O3jK5_7497PaXC_*cf_~7>VRT?{Yu7?6Xmx@ zZPDxLFI2!Nb%#f7utgo?FJLSS6npG)FN7`9##P-lP|EH&wcM&Bp|`F9*elb*+IH7@ z8BJcCQsTAw402p1h!HC9cyj8g;<5oR{G&qIsd3#)1@`W)JIf%TF9-I8M3K5XOHPT5 zJ>LU_&2*)G`oqa^9N9&Lw9z3f=!B z4o)`Y`L~7H{QRocFfb3c4u9X*>EY7`RFSM@rHE3^W`=}xPG&>~{2)B7e+$lSErE%T zR2iUeew9aA%b=K5)FH7>G+=l92^sqm#k$0oT*cD8M0t-wL|s3XjxUk8?gZ%f!94T?IoSzWc(o^WuzS+Y@ z`rDYlZd@P;FxT5gK|XB(Tsp3NF4kq1cs5{`O}LI|{t^g%KiKD&5_bS!XS2G|M0|J9 zD5}=&R^3ib5Jp;}se*QM`MgYp-A(#g<@zh`z2mwKCtPfdGFiDd$Xg=BZ-h4jUM?9R zZg_Kdah47UVo09izQ~%I5`NG6?B-n%j#l9NJiF)-!}P6Leh5#F0=ArP$a^fRpB+GL z2sIg0kt-1kx5`k}BD2oMjnPodE>ba_0eGa*fy{@DknCpUpMh(_hZr(ci`)}Ip}V=d zKqgs?UeI)1P^!ET7Fy26>@3DA!|;LG)ix9<apN0vt6$K*?s(U?g0d|$3{+>e5s zG_$`ky3=Wv`v$CxEHu#}PYV2&KE#VKr(YrS>_9fL=PEM{6n zD;bEPP<_hK-{3aC$gJJcojj9E8>z4z*MCGU1Peju6fueG9clVk2BVUB;_?8$l^bIx zhv_b3W?D@SIY;|v=N;r4`O(5bx-SGFaxkXQxOIY^Y=C0N7_!-ayP%W|5?#;Cncdp6 zOW`JH`zcSqPMS}8HAOC(LJg@VmV)zg`TBaZX-gFw_ZD?2-aRQPo%<>5X0`wk^-nO? zLi#!NO$`;2!116bB)jAn!VLjrCv23Juhc8hn~sN^_+e7xjMg>PBzq7?z?XC=twbMd zo}^95Ba_FBRjteJ+hA4ueADNaN!tlXHkTKIf)R?^QzCmJ+5Bxb=RZpSo5`NfOMRd5~X~b_AsdDAG=#I8MIXZhg7$Uh~~44 z2^^JSJcM`FuUnsCFcGkt{E$H-|DG1%6#kl!-SZU-8{bi@bkTLxOZLI?gMUUL_bRRH zV&RBBGRExOt%*@{C58p8eN=KicTpa+MhogQa2ZE}2rcsj`5fCquRHVIjO;OV(oGs{ z-sz%6mhuhb*&nITB$Al;QBF?R!zmtU%s2+%SgDRMew?NGI`}+VxBwaePeWr%QU1O-|W&?u6CmbTgdU zkr+(N_jDQ!Y*&DH<{yP7Z4M2)nh@9t7}s}3+g0ZMH+o*Fffe(v@Nb$OyUDQ83grGz z*{!NKQh+H<8|t(BPC*l0ky0nb*N|`Z!b>Pwyj+KTbmuEG0%ED4XSC+hkb|a;$H#FE$tH+9BB0=h(O`&u5S+tlNrBtV8tK5B5eOS#*eh-PR z{WbyzNJoKGj!}$~W=HTrmYC$v>p%<|=Fkj1AEF7(&7;ipr!DUw}TWXn@i*1Bwjr#faBHnW_ZvfV;->cQ_Y++et={4;a$ zfzP&OH}vgTZ|vyJ9L7+%#OmW3&DX++AfYVv2zk^|6qjIJ*Dff}i#_@w$P4=rjJl$r z)A`~B&UTbQPrd+6w4Cqvlpo-mdK+OFQ#+G?okJ<1WRT1t>`X0PWRM=<0H5EkQ=PoU z0hyzo%CtLj%;T=+nB&t={ z7iGSMcz6N%Tr3C;LnYxYC`%z5q zblEd(*v@TZ>&M#Etl!O$#@eLsON$6+>@`h92&Y2=8X;LzotVtMfILBy5gctC=BH2< z9MR^Z_2I>T27XIVS-S~LO`vk9AZ*`tR3!X}#hP>BV0gSlD_b(8Z?;B#B&*iX#o+a@ z6xV$sjiQoS%nBk(M6pz9BaY!>2!uj^NaUTOenKH>eFIGz%+jA~-<5Rodae+fH8c=y z7GLE*cRs)1IL_Y+0Ms#5;$Nv#cl)*M!tdLve})bfX@*f%F(MZ!>LI;}v!|3iO5npf zhz1r5GBx$W%QBcvaGFHfi+)OiD9XB?Q0PN&8qHwhl?ln{g|_I0afWO=rYS99tQ?^r(RwYdOfKH*{1H=-HPJ0KbX6EUT9jNE!}4 zY9_DIQZ<>X@(E1PDXGO2DqT?3*-e<4P>^gnW@|BrdU~~`uF>&Bb2_Qv-q$sZV>T|T zJ|?rD<=ZuM5L*);9Yyd~%nQ>MHjmdvj@c^ayBX2gyn7`g9gt*@JHupg>Y`6RVJmq* zMr*KmD*sBI0!TKe1pz~-G*2y~Y!pP_=`vYP_?aArUvbQp6+wI`>6pbCnh40hAS2NkdU2=`P7~L7c|Tk1H*) zfjIZ4>-#h*)47H$#-nRQtV>BM>A~@47Z%ab)z50~L6Md`cb44_4e+!|r^r2t=<)ad zHe*ZUF4=qLH0K?DtKS1lIR6!0z?Ld|5QDI5y9~)!p>6UME0JS!ODP@|Cq19LR$q3E zsKe4)0a$3c7T?oZ3Z_J<{;EBO=2}II>y2~uQm|-_5Q(5fZ-4z1h=}gB^f}7YW!)ne zA&5`W`aUn@x$SHkGFKvJhiQwj{h&u9PdAD2n=AO2d3zGe)2t9g|L%;vE@Vm)OWhA- ztY*{agRiN&>zeL=xV$!ivA)^qKbax2fQcy-_|F_!e^DTVS0kn2vdEimbM{&#g(vwq zKsV+t=V0@tJ_c=#_r%kDEVfoUo(6nK{7gHxSoJbN9zEF0DlT#H*KkTHMvfIt+HzXd zXAiyId57#Yz^13rY0v@%w3O4-u8VEP^i4Eyuey9Ybf8l0DDkaQtB0VC6PF8mQXA0_Ew29){yNlmsZ>*KOY zO8JHu0}E1;bLvNAEOgPavaYY$b$oJfF2sm7LNayl>C#h6<#2K z6m;Vq-koWR*;uiWBY?C>x;u0k$oc>z#*IZ}S;SiF@v+3UwzlPmhVoi|uA;8$_9og! zWy=l?xOp#TO5pg@{KxFlzWVpR#dOvaX;`y$G2|V4A)J~*E=*X036$})n2?gcB1wF10emEf zULJH5OwwPK+nloaV@@kHS|cF}t&v=?L|-IMSoH8Ww#G%mQ&N|I;Jlp!)HIjQ0#-pt zE-Vw;tynenkAgj;R^0=uUmOobX{*gE)2la&567$e;Na^eaGR(fa1pOSXt(J zvG`M>Qg1^N#~tphuqUA)u6Q1LBbX7TOfEo13Bud^(5EO92LR_ZhR}xIuSLs6)l?Ek zapbf?aSSTKbVQRNE&(AU%qarvV-^(0ZKBkNb)q&wK9$eY_TxfxK|U=-nw6=xKR0>y z9C!QkBMT}?b)B?1qgVWNc!wa`+2oSj$hDvFP;F5TJ|KE;aJZIT#xTb; zewTuSadmYctFWy`Qll3l*!Qz{ThQjBuhq3{qpNmtyN0b`y9pM|ue#3#4qL_RFIezd zc-sFtZvZnSS;_<}Br-tOI*<{m>qLFhQJTs}U?l>odVfEUKqV#Hm}$NDH~^FC`y-vw z>$Dea`><;yBdomHF3ADOTWgBTg%M_mZrZaB&ahXKGQO}E+!+#vAz?AL)U)6?ODgbG z>uKldsBLaMsV75gf1=7hp4kD{O|J(#@Uho+tExeGtz1z!`xn6X)Vd)nOLtGjiFY?4 z$6F&>trS|Wr5rZF?)PytN>V^7s%WkBvw@6rCcLRdS$gc@of`Pzlp46;(9c&%hZW`; zVpF!a951&I9c)ZJZ7wbJdccwH=YCArn$cAeD3OIXSoDOt{ohdi!xTvynPAjcHrvk?OL% z$+l)zb21*m{4;M=*xHB1Pm_liZ#H6-)p3r>Ho(3tTYp-6#hepOf|p;*=9FV3xvXED~YY)&=IbSL^wQ&~CP z46{OI)%Yf-;9vDit{i!y)IV-F^h6!#Yi{MT?U?g;Asu-{(EGVSqyn(9EQkBk16dtl zZ-87@3t%Y$WD8I&oP7jJV2|KHP=97%b3Gdgdcjg+MbX@F5wt!*ZDEvlATDTKpe#h) z*i=PXW@sOZM|Q==1Gxr4^-ah;$33D@ndllQ6HnzBWoO2-yi~}x!A@|lv72ET)P6@>8Yk1e*VQl=TiW2rH>|GuZdtpEM!q-g6w zBB!izK;mMu5i%0m8(G2d@G!`j+L^mp{3c{#W@gq;%zh;w383TKf?(eQMeuPZ7&ODjYga3U6 zscseZx&)-HF@q&#{PbEKsF<_T^W08@n0QJCf~bxv-CX-RD2>0d(9du_HZ z$A^Vhw*!jq-SE?|V_^>k;5Tn8hC+d+Lg)3vM#3b)!WbjaVVz)4B*s9aO4R()5-N~0 zXvPW7ZhSA0TcEc(;u3N*gO6c(qJTRZAEEUf$YUm~86dp%hjAEdOihz0H;4v(x zSeaNoC3%oTqWXx*1mt=F{D5?iiYL;TYf@^@^inYRv4ES0K>gUxia>WaeX_ML(43OT zt^oD3b5M0j^EK9Z*+FA*Z*}M=DWw(n6JlNjM1Kq*e4Ip)n#C?ku8tQ(4v3$-4hcO_s4hI1w=p5Y|5MmGL}wOmTRXOGR&3k0Z95fJ zoP4ouRcu#m+qP|+f6jk8_qOiXW3SG;$5@^HcIJB4oLZWu;6tCdf^H|$^>~$et{Q&g zlj=C-(GAM=+A?Ks@4od^^kvel87RqU9O=)n_|fr-e`HlD2Q>ds&V?CEx2c~8*DA_J z4ak3uqc9;umKpA|_Cnn$@2l=|s{O#j>HIfrf&?IUrqYal$iM(`V^Ke8x9B94#b~nJ zl8B@_ggYQ}V@AG>dmxNTrXblo3@p*S(Nd?C&w%wjH!N$?$%d)J+KRE#f3-G3>Fpe> z%-r0{du}PENw76u`AUdc0p>kA-!nxr*Q3pxa^X2MZN+P(jdE(}gyp3m5ybIQgWW>05wR;23*^{7mP1WG9>+ziNNQQooN?Zuzgc(xOFHyoiWAC!B~mnbdBR zja85J@PLZghgMa4q58YqqapVK#n-oF8d*N1_cQoj5Eljtf;%^v0jcuv)c8SYJB*SO z{U{%d65>2@Kkn#>QA(wvxJ8x-zp zGsF(wc2v?zmLL=>q;^`WAv5kk92XjVI7H}r9{tM(Y7T)q-usP;0)V?1E5B9sWuXKG zAlY#{fI4D8s`~}w(t>lbw}N6B%PU__yHmqFXaFE{E&EkOg@*>EXzQN@q=sIJ4m_X^ zO=rd+q7~XdLvjmD7fNiJi@+rMt@++b1$=y{&;g5}hi0)an-1)HLL&%Xj%lT|wp2!Ood-K!2HT zkaQZnTl8P`yr?xBLu6z8ia5_0n!%deQLh1=cMXfXwfvt#6`S^-xwWhvHFaIW3Toh27zT?| zlCNT!i}sD3^Y)F}mp$9sJJ;yDIs-tUrYw{4cyQ?Zo?9vQeL6|nm+S&Xe=n3KB^`Z!nYXyh5ZsDj=r5L!~%Z(Oy!sFIpDJOsil zh5L5K9a<`S$Le;X82Fj~Zm1fN7|*%(BPOz2kvXe)m$m37Cpj($yWRouNZ*a|^I4Vt z3*QwDwZp*sjlO^xH8ON*wF`i9w-Y|A7$(s?f~S;-yln%QZszZ_G8-&Qq+F?a@l~i1 zeUnVi=w-hl8&H<}>qXWi&3SXB6Tn0GUh) z-K&8_hjI24Y!n5jHy8kUt_blP4mZ?U#1}2MEtYFrdsM+fk$9O72MIga@)}l~&J(_7 zTsh1I#*GDJMbju&sC7cin5!6MOIPa_)vEAysj{cU?i!zEG;1OQmsWvl#p)M6N?h4rR=yMo_=sN{YwVeyMJBZu(W(1%!I*QOD z`IXUpO(qgr){K^0`J6}z-S261zmZrXUm)7`qpgHwz8V&B-1at55z4+7^RJBJ*9omK zxx}9H+o^~QcL99xAMxAV+87RAAqcVX+@CLdJDXiR`$G{X@HiKAH|GJ8PrWnp(V@k?w{;K(7#V0ihac{)p?X-yb6~$<-pz4M zfQokXiNWUY=e}#P%V!qd=Gs>{6q4C{Nna(zet1Nyzh4QCRIhEWB!0u?NHR@1Dxt^S za?%GIyu1&-;>X?x2daSFK!THy0q91OB`DKuF2L8u$scM&SEB1#FOLg}mQNrjfvvC= z;ZxP|Z_Jvtd(rvj_L_S=QXCm5>&EI}oT9guJVoh_*1=K^_nnm=x8QduQ7Pys5<+;M z8y^w|;nxakp9TLHnSO>n%!~$UvWD#8-^Hhn`DE z2!N78p|>~-r6s@DJQ6DSY0D$|05T#CHZ7JuH{(HMmotmSAp+|sst^KJv^pP*fhmU< zf+AADmqz6EeExD3n@%@K#edt7M(E?nbt2F*eUZUj81lpE#7r(91X9XHG_h^qfkETs zYA3t2vGH;@w9x^0w|!o#g(S#zR+*qm*K?p*S|(fu`hp?Sw8=q z%RKc7rp^r!Qk`5_6=wt%h!f8k9mFM%~9(8ktqD=#ivkOM(zoz`oV%75N z`&ZXS4s8ju%qkPEfZy?y*nQC23ILqBpM zZEc~Meean*Z&uC{BBgnqdCC0xbY*&9XJh^eXHGs+awWqUWwh$$su&6)Vt`x@Wp${W zEp2>w54FWbHz(a}kZn1ZaFCHmiG@ho5|YGOc_ZD#aqEf#12UmzZ~l)O$*&U933 zObntEVsi}pnAX@rS<3Eg2IqR|Hp+3y5Y-7~dt`cystMAri!a($Vp&qha+4dX@(-`BsQXA%w;JA^v^Eo`rjx4HF&zbO2baMk`hE_0uO*61TyeF3cnLx zC$9kXh*f$s#`k!<0&zzwX^t@7dp%H3Z|kZIK5r|_9s6vYx@zWfNb8gqViTMjr#BCT z4?{!rRrToT6us-xTDhCV_+P!@=EbGu<-YXeEv~h;`>s>qitnCYk;eR4HFZV(?izBZ zmd-s{R#l{kI@o;{U2s5&AKqGM>O{*uxo_MBFf{L3JWHipK?la@U9mWyxkK6vE(+oI zA|n0F_J^uv`%S2qM%Sd1WU}Bo(S#2!beuVg#933Ex;XiJT~-iO^)!mTyqT7Cz|Gba zKOzKUPN8vY0a2MT*N(A%Krzs{rM4$*) zwWJ5{4wEOyh48tz{onOr`nxv}-48*+q)sMT=weeuN)suip@5)T+cUO489n8R2Oy{M zeFX|9!%N~F=EP)@K+@y@t}e{!vD;?5 zJlMO95||J-p=6>kjQVMaq7;Q7^#mm(Oui`gN1g3vcs{o#DmYa+5*o)<2dY_<$>SfV zzupiXxI9bK4@N9YD*6aZX)Jdlgm-Eh?>iHZTv2KN0$>5E`g&wOGe;4MU_&kn2*8-RQ zY5<5fJO1;AMve0FaZ@l#$Lj2&;h=31NOD#f2;-!8B?v|)2&U9Z97^V%i5C1Q81%f$=eY#Gc+xX=3huHy3PXeVB%&sqrQbvSe zp*(&TsBW`+wx-sqoq|UDaye%$kYB9`aSeE_RO9hkqYy2a=2%hc*2;mShNH!Dav_bk zP3nNmPA}tSiyVg~%|_L--xW1$$W3c=%6wO#m=NLw*x}}<+Z7sVgPuPgSA!GeIMXIT*LLaO8C-Q&;DB<` z<$>`7F>`NBo*bgnR+U3>vM0*aWN_yX?;-#|l)sy9I#QAus|L~Z8rn)Y<{Y+rvIm|m z{r{DYxL-&8tDWH_we)NXKC4giNZfoMhK)WHzu(x##GxDNJ2j0tpJ&u3vl0|Z#ZI)x z!sSRS`vFA$1yZieiYau|5?StrDf>rtq)zSqHxfCK5mKzNK;P&pELhB ziqtj=JYa^;E`}0l7uin_q$|h$>6#)l^p0gM0|VWHY6%^wkQtCUORMiRGf%+1X6p%I zyF~&Kwo2TH1p1AW3j&PJOjIcI_Ua2bp%@4|NH87L<~HmEI}$s7oNq4C>M+FgCt4> zZFb7t-dEhu4j7YMIB~-9jyG2rSZVSx^2%h|vx<3vlTT&BIlU2;)dRX<{+V&(-$GlY zFt7jNw6E#7*>J|BzP#8r-4x9YTPOvG)>Afg{n;!vs)tvh9c8iLMkas5o@0)9t)>P)3F`2qifj9 z6fotGek|cD=?KO7ee02VB+m{|Q&+d+KxnaWRgf3Q!Qs9dt+<7^WoSNl3-RGHkF2s) zsI@nsnG#iVzT6VZu4l0D;>Jm+Tn zX)NH}46-G|f5s2bs&o9w-oT$j$4=z+5Sag$cyefd^yO~qllUo&>jXIUa&t-B_ri9j za>C1=48(v>q}VVE;Jp7ZST=d4xdL4H7$26YB=5b0O+I%cmTm#+?#oJC$+IOB?{%Gk zeYz*I<}&xwcZ1FM!l$(8o2ypqE=&V2OexGLa7`(A$av~pYSGvegBfUh1a>~0X_mX+ z_3R;CCJ@q;nPa``7ECe88xHVYf0N&57R8vElpPEyKh3tCY}0vzc&6er9y#B3+Rt?N zWWVxb`5(>!5t;(tWZ-hlT~L{CS9iRN_v??Os8iF2M`)iCHBJECbwJrfYqlq`*Fu3` zq6Ga*uz&!pswmY&h&vEZpXfrVEy&(M;*7cjT;*}xrT&(hb|ES(juI@82qeV;Hk_#5 zvFCnG4+4VJ#Vp>D@gooBiLsy;f^-mjfk+q2--jFNsWpI6Zv66tCTx~^m-vG&{*6Tn z^Ov+H+1PrC(-XpzYr>U%ReH+5UbQRNiuA1O(lT~xt~}9wMKAdBZF7x%k2#O zcO$`5YQlQTqp{M3A$AnaY_+gnqHFh^#)4jCQq|j)KsC{6eDjq$GOIgIH4dLv6=uU>HYu{@RFhsExD#xsOCYoz&6&gCPZh;{jq?UnVl~1lHq+V&6j@%9hWPM z)9v``_stG@iuwSJ`c@w>IftW-Ex)B4mes^J{lRDKoBpLn2SPj=x&U&f2$fL&u@u_Y z>o3@=_SA&X6u(llfw5o^wN!70P0!~&xvW=N%pd^rQr3?lh|)6>P;Ps>d3i&boMox| z68n8&mg_Ia-soU9^*j*ESHb{X?^>y1Uppg*ty2 zY^Jf=jwI#289_G%cbfQ70K}CZY^sX;H?6<>_CI6`^6`^-J;agd@JCay_EEK^FQzeFH_f;)_-YUbwMYwj=EFW7q!>nhQH#;C_VTBOt!Yb*?ZKcX}xa6=SwIdaA zD6W4f*Pv5`wK}>t4JVMvWcw&2x%#0+b?R%}kt%Bc@S&8obxJLZAbHH@DCymu+^1$s zJ59ns;M1Y+j?rhomDVoLTp#l)XA^KgO*2j5`;`ii8b3KEZ#Qo5hd@47z?;@B&JDDQdR}FUs#=kU{Mn_nR#!6t_?9`6fz)lEKD40VQC!oA;X3! zvrs#yho?O1!9`2@_}kI-&b+={?q~as+ikUbX@|6DnY*o6+m$w{Ug1qwzypSD(Fruv zi}sasoJuA=d9nTld3vMo!W5LEL{)og$N>tHw70V@&Ig+d9)9DH+KnKj+P7tWk~1af zN1x~KWQgHg&(1dIqPFXMqTD?t=F+*%&y&U0JHyBkwG@ zmbRVP*s-xXo#l>@&RYAV^WvM``?rFgJ5kfMTb2PxEuxhvqNRC1@fMqO4$m3o67A|n zJJPq0NOh~@JJxxhF9O5}RLR|!ya%1p06O|y<3rW66&?i!-`r}yNC7k7xqcCE_AXc| zuX~eP17v3PVuByqllgQmntm74AcolT;!o_9jJ~Iu#H|IPeSB_{^9c_-&Nz;+XlIab z+eu<}T?1#y&Rau$G#b9CnG&bpZ?~-%wrj0(a>`ug%V3z}N@bE;@Lco~-6i;u!*|V{ z@^ym-#;;^DgB5q3HvoPE|}{ajirAnbH07;r!t}_ z5Fu2k=Atj*qy!e`{$Ed5-< zp9OItcPmNJ%eY}rh6^7x`^1}072J{5x*eFu49%yxfzy+1!)Uv95=Hv_(ZU&;kukU}ZlV6OE*dO~>TAjaW6qz)MQVTWm9 z0b^x*?eYrU1p@$k(>tWl%{};^^f&b<-TvL+U#XhF+u%$JP?z=;jmFm*-@nv_HgPy7 z2PU?z!M5Q(8=eCV9*9@JkwKBT$!~e&$AU1;T5iJsd?CL%Z690{4DcS1?|Ws52CX%V z!aPIOuKz_jmG?yb91-tS;3ZUJh>l=0Pk{PDX}5&tmmw`hDK zYH|BsjCoR?L#{?#tSb-0zmD8i^AtOMF*OT3|Ks)A65gsiYB|bL9{znZgVC#$hwnZ< z+__fr_04-1_?z%Q58z1&aX7IJMz8zIaZ}|D`g0nl1N;%(fE6l42R?_*yZ45s|C_19 z=mEL%YhYYDL1xH9OUxy=;;=5`g7o>`31i_EkkgSRCwxHBktGvR=AU{m3H*3h7t#?+ z{yvw0@`mVyO%MK%+98|w0l@$}Ky+|hCkYeeq^}-_Qfotk#>nBIxiUG9wv)4G=5GpZ zuy2NJyZpUl2EH;Ya8s9n7Gc&=Ns@rIXU6v0;_jDPpF4H_(@h+`^{1OPdWi>DtSW$# zzjqvmnkvD^O6u>Ofyb)gkt#+jTwtjp-^4iD7+`W7#IdYvdYq(3!(B`0Y@sRUH2uDQ zpJMo^aLrJzGw3^7Vff)9%D_4&Ep8>Ug%vk)*nE0O{NtqwK;l~BVrWU-<>P7m>!8L; zm`MKyywB%_q@Xw`PRFGF_V$ztnjf%QerHj1+rs*5auOkWfIQS(L2AB$DyYM6aP;;? z*Or}~Bw9f#QAFjqh-YddW>{iKVM3_i@pR+iVqm28Ha?9IH~Fo&L_B2bIXWjo>axFo zU!|l&`FkcE`t)KZi4`R?*)uex7>Jc1kR99M+r`_-l7yX&or7Z@3o47pZ3-X&2QOFW z`aw}lF|QwmsPGd)ieUijQ$d7UJ^1U#xRXltjS%8U$p9S-I zc$ng2zMcZqtKF;F7nLw4%O8+JUOYW$t^g+lDS}Hxv5zWp%OvP^HgUkXS^j} zPmjvX3jC0PlOglXjL}WQ&LP1)!kSKeJW4Bjn`jD0-V8>s7q<}SNqPC>lrWp9S*2Ba z9O}fA?k6JsPBN8k>=4`gNvkW7Yks%xTZ&KWCVUEnO`@V`!_&YH{0AVcSP{ZnWKAwJ z%8>BrQ^wF_uOhwJnrws&c~QI@J>d1qqSLgR$2+x#AK;9jjTfNJ#0>qc>%W6XcIR1>-?2B>59k#3x5B`H7m=njd^J0m}?1V?+-%mN{v8p8Q7;$ zC$i-!Z_+SuCf5EqBOYL7oGL_2phKXa^H0hn)jwDB-7VN@sCb)bP?wl)sih4>z5(oN z$!MyfLoO^mQs^GX7<}IoxgpCRrw@TBQyij9029KtZ1LF-e!v{vt_ABHl_R;#RmwL& znR?I%R-hC$D^Yxmy;KtQjMso>VsITaD`m>?fM-IgWz))001m)=_mnC#N(f-?3ehs} zwqf>9!U=5_Va$hqg5U~vA3>Ri|5zCwa~1@(!spwYA;0qtnIsVCHv+jDc}%?VW$@m9 zCwwc0%${b##v^h2=hm;t4a~f2g2Dm4T@aNO#9eUXiX+XLkD7JQiILSy$*}@D#q_bq z>P<8M`OCorFW=8|TJMP#N>%grPn%uy5QE?Zl|v^9^`@0ND|LhqUr z!Z9C3&ruQRL^J+?w%?=flRwoKIr@!9f3KQI_QZiH%r*!vh74;ED2x_%+|#`#s!;M~ zvjf^H$@R`);lw41cs(vj+%al|bjM~{3eH*vsgLDO1`PO>AGm-_!Ad3~ilVjL0AlV! zBbgUSR*0Pc3%8$s& z;G+x5rSEP0<4ec)diWjhD_s@(8u9uYQ)L@g=D+yUf0^6=;7@eGjLqTtke^JcJM2H` zUPT-v4KQo-avbD8FktroLQ+-9khH)Y&1=b!VSKN zx#@Gw_dFXdA)^#7-6kC(Jt}RjM5RH6PJ>QeB@~sM*fdvnhXbhsuD?nhknckl91ckC zg_YtkqRn5Ax#c_V^WNl=7}R~SoEhBl*7*}Zcs#y z5TZJ%ghl#bpVuB0#Pz^V}YG2w$_P@U;;-(vi9|hYX)xBa;OXK zmzto@G8@`bnis^O4@aDg=8-5uAxp4EbUA^%NcfYY1%AoS3dUJiARYJ+#i{t$jwW# z#6uS!I-%EI14m|>q1W-~WlZKZ^4kT;KXF3r09OE!_hXO0b0K5k9gYiAtO06qDP+9r z=#wf8WFyfL3gUosjEOMG1psCT6v_FlDN)-zMAE}Re}jt|@s7VhMs0bTBQXy$krPjW zdSnR(6v&z)*80hU)jua;V;!cDFy>lpc-DfL;JUvVVnx(4FkTR^NJt$Es>2u#6vftx zLZ|`jhWP~s%!neSQ~PD06cW|`^7XeO-c|qQI3|`wgux`NNF@d$9|vgc`9&EKg!BTl z$Cyzp8d!{DE<9;yStO)F?$2szj3+l3FOHL?Ddy}@7#&guhs)&Pz>2&CEr z)b;0WBneD*5ETy(0`$eNGNgyV0f)%$SYB@sE9=X$LbNXwI|3bmTP>X#X)fVOhXEF>ITAE2s=&eF#9hIsL?XNrX6p<)z?mNo5L267r9GW69b8bMHUb}1`9=Angv?e1jIdeC3fRj@uYl{wn?q8sQ@k5U zJb*&@u%CmTX&jg&y+Jp@@eg#8V7g(Z;j9<^2XY7Ygd|Ltc9BIPN`233(m*w+E6o-i z9;iH+#9XU>n#9>7p~UA0w=M_6i@`^LOh2j=(#x8o*WvSS-fC4-5k_@2JeZ^3mDQ=Y zT}3FsOIxEY3t%Ri+N!#4&g~ZIy{bm;;q`d5e!53Y{hrm2_qv6aPM7ulZs~fPu|KYV zKE5_5TxZa!O>Mqhzq%>r(WTYzKN_doIG`|j~0@W7B7Ta5u%Q_GCxLViXxX`_6pSHGf=tFEn&Ut9K`v)w6 z=g%%zOg#4L%{heY;+N4k<>6^@s*Lazc4*P?x~0G>k6xn#eUOUjor(*0ADn z7T@g(nx|*mZ0~^Kx;mLxA)$U_y>EY}{O7Mez*&BHnpy3hHD`ehI?k3f)F#$$w%zr2 zTis_oNsQ`Q$ww$I?7PIv@B3FLP<-|CcX9TvX>J?biLNaUh;#hPGTdq(lDq9Qs&g6V zT1uqVEP=kpPEeSZ@9yB~{>#b!{Yx?&hUWFBTVL0$ueLU8z{ioC{mtgtymfne&fl6E zfWG$%Jz?|X>R{97f}{$AIY7tP8qu8}I9q2yA44O52ww;QT}@A~b}8prX7f8zMr9wu zZ@fz6FL&`I4%Mtp!~Tn6)SfkAq>MqR^15QE@}_2}u%23|u#O~*xileJJ-<;d0#@&1 z;0gE3*Vsay;^I=?%);V7#f9a6Gb{^A068m^^ZNG5C;P_L>Z{+Gm`-5|l_sGc)j4%B zO&#igTn-zn3m9tT@I^fA&R48_h#HSRzr(1l`9-j3^n+FrGPN0!rZT zMzi0ibLiJ4C|A<0%<(*^z@RJZUWPh^zMz>x>S?^Qn7K%#(Q3sY6h_2{WG2LK>U|79V*(@({0C z8V}=y;DBTQ4*&iT^G_KzZJEaN2fktrI61wvswaGSCr$*LBP2Q-!ycP_)(h@^CEt( ziOPBWBXPXM(y-`N<+WqT?7=t28S)Wg~3nbV?6J?*wtVZnIod944!pRH)+U&k@T z_aL?HA)6lHD|(=S_YN@GWz+Sq1l?r=5MzUtNX1(tX)@F0Uic6k%MiaY*j|@#!T(=r zVS?92vO7>FK)+ynuhauAys#TDmMB64q+CsyX)o0SKo1ddPW_PwFPJPT?&og(;5zPb z?)>03?u>t`Xq(#M&6KP-A311VM+}}NWx-#@^B!*i#Fndv$8aqlqxFjP(cy7iDz&eE z1cFCd?V$TlVrp&>=a_RiMeLpTURgm$oIAcWPeBr6$y`x$rwn%v#n4py`a&iAS?4&C1d$L|M|RkHwbH z`V~2V_rlA~raZqHLo={UstG2qcg~2zeOjG>20Ku_t2e@=j)zcn2){iuljkts_9c7F zaBk~T}yEqf16autpX(H=TGn<0!;M-8Em|U|+;iCJSXjRrxPE`Gz z^lL)Iravw-Lbb*R8GduE$dpHIAOo)*6@5(p$yJ(FT0tV;HTbAtOZtp?E+oVQEPrh{ z0KYFEd6Hfhp_;8ciXR!a>(z9MEuY(OvM!3e8HhH`zL-cTff z{KaY#Pg;f-nbvF*r#{(A-X+9bSiU}(AH4+5gbiOB%}${fnPv+AK9!6I=$5}xCKS&o zH5cFHJ<--@EOVbyEF|o-e7BP(;aSqP&zfygTv`VRn*XnX{(!kQ z3no*r-1;G7c-m>-PFMurUbUZ9vcVi6sPAGvk4S;1o>pskMIor~bnDFpD+Svr>Qa8V z#r3Yd9KEATJj^BbZ%kX%8~rfg>!(%`{l*tB*hZqA7*V zv8gpi0ub*+4!#q$h`KB}Up3l_JyQ!SahiT}pnita#VA2tZ*!n#gD>Xi_^St4dP9xC zMSDf{`R7e@=ZQr@y(ezWeaZEXW+iYIEu|qlJqiPCD-XtaruJ_J`(H2v`B0*mcgNcB z!r@|gQ4THnBI!7uN+sElEv<7gaetL*L2+kr=9RG$x4GBGnw&)5fN`(9L>}wy0?ha> z!N^}p!pc-H)uCs>F@=d%E=fl~f4Ktfm#U)|yE!O^qwy(}=7CGDBYY!jwAaYJYyD>7 zwak2E{{y*OW2cS5Rs#n|U*UCE5aSV!0H;dxi=G*dZ-zjnS!3_?p4;et1!|4!d@AL2 zYV74FyN`|d<=2w$YVq_+%z5pF85w@c>qqgt2xQi{zCeA!A8-E&mbYR+?)z1#)w~&j ziACo1NqG0fvE9*ncIr?}$%U%Kh4=T$S4P)5P1F*q_&CT$r5|z2KMro}IQSCB6T#yP zbUDAUt(yf79tP}Xf&f>>FS!)2zmJTs+U7v2DS81N^Ga94vb?DEC{I)~53H8uV3T-| za<4y#4DvEITJy6hW@{ZFjAUCPrIi}U`rT5-ByFLZgZ+8fkx+@h4=XmkR>NcEunL)I?x|3$S!c`T7Q8HpKjqCA2 zRKr)RT3u-MG$0#*hG8mdFfSUBslt^7wO5*F6wI}gOKze_8|P;du+bWj0S*!c+{z-1 zT2RhO@^Tjk2{x95OypLWo@GA`!Vp(#|3`WI)^coLi=IwRHZ!X{F85(pCW)ApiB=B} z&-3i_fKy@Y-QRjKCaKlAG7;RT-zhIl>t~Mjn>A!zI`&V1?DS4OK!_2;-j=A6yX~?< z(x>RGg6pNPEywwEtj1;W*lcFkwO4nC-E+UIfmZJNC&qGSEA6)2!>4n7$vcf>$G7ug zh4NR|EBSiSyYJuD(@QB|x4BMkrT6C5`>XRv=|{qsXP8r|z=b^FO$qGCtBMi1HR9P< zqb(n0r9%Y(B}D)GF~T)OKW0U~Z_8Ch$T1uyfXDl_J^D&Xsif_5zgn0-I$V&$mvT$d19LwlFV*^$Vs-p>gN6Y*sBVt)Zc!!L$?CG zi)-G_c^jtpu114YGZ+fhkT&}CGAs^e+^~e2HxAEA^=|wNl?nh?utY_jKEpXF*U7L-Xb8t3j`@U5dEX$1(u< zZCV)c(Ru~;c{8)sE&s?bFy+y_MxUUxT~o8Zy3KKknA7Z5;kA;sl~UqkWZO)7J?0BJ zK+qR7xqj&C(cC2$9)fx=8_%7|7W5Bwh08_0+$ufM=tO%S9 z1#5>4wjncmga3>0fb3_TTHY9gqy{q{*j z6(33ZJU9OCL6(r3V_9r~Bg_;D>VnMx^Irk05cS;Z5dk&RBjwV7_+>Vq>gFGJO1`Q1 zz9Dm4v~$8?v**l0oI&6qlTN!rZK6SC@EEmfB=0-fFz^X`|KgZF$`u^3NoAA+e4-C8 zQxWCj{yPT&nG$b*1qb?!5_z z55U*`mTJ!!t^$7F#Qe=La+5@+&yY0}&Lnq%|)Jik<^ut_qb5WzWzAAg0_wbumn@|7t& zGn9+!PSPuaX=v13|Gr+6p4i%?``x-SP(>&49nttLvoQ7kSnNY3+V-~_O~}&7acOhw zT*E^Hn&#$LT~O^HUh$>x`%wF$-Z*|yyV)oJRLL@2=syx2YU)ZdBwQ-j5hNlsBZIh= zld}sEN9s*7Bp!f`>whV4RY^L(*BH_Kwx4M}R$zz?P>xB63&EsERn=ANn5xc1i1cx& zR*)T=@2=glQe>o9fy;{qxTacPvlK!}19(N#gVPR4BG*R5vYbVI4q6;6RSvk=^K(U@ zL9t!1gYi{u`+8xNhFukFLigpUZX~6m0Tv9fc3{rJ4r!|S{4xFSr<5n6yQbP<%UUEA z_N5VM+apEN&gr|9=*q{Q^Z5IDr76P2;R{0zo-Rbwp%i!(*UXT1{#f^uO5NW@Y!5^@ zIIACq?{M}O0ur+?jDc%oU^>S|>gR1RJ4-9m?8z7vl3(gbyF#WOMa!8LL~5{(favSx zGEI>wjrFV=Vizq8V{j6ZPkw@_coC@VK$+j?%<9dv4hc!^nFK}M3Sf{&UpTD<9yP(@ zdP7jzLh=G}$9qD`F=E+#-KSuHI*;r#ivb_yb{LVzw-qx4V3v8>c`50#?;z5@Xs^t1 zTEs{v7*guQkRSFiz^$^VWz@4jIZaG;L|K|QjPAIrXZ@2=@4rW-8$)>aC=Tt zT(>S5IJuy_Eprxxu8Q_Uo@TN>CYr0`Cz-1}#6S*nj|%faAd#CcArk&1Hz9rS7QYH; zH{dYfnRm}GJQLnFh%nt82m)L&w%P`@gpv+e6B1wbLNUcZIcRQZIvy}1*6v<9w7_$^ z^ReN%zt`4l8xMQ|Nq8Zry7|J8OxTn3ZIOP1dN1*h|Mw51JNj9UB|L?M z7B(?5`w@JNnT$*rjo3_#n3&mE7){yCm^itN*qKc@O!;~LuP;)qPa%nb8B-%qe-@%S z*#D<=Ot+w=DyM|ibKBW|yrDu(Hl~Uqj7;|2Ho_}&MC|yJ+Csu?kq!Ht!EAa&qGC3d z6nQu(GQD(Xe%q%_P|16E@x8{-{aE$wHl_7`XiFSqX$^x+qPwuq)A7TF;RYLija&#) z1&7V)Nmk?ysEex7>;oc`!i$=Qa=bsI2E01XMMZGF`Ood3wn{?t$mI4bwzzMIaV(`- z)@qvNy=f5X1QGpPQwvG(IwwfU|ev(|5n{U+#yA1=Wnp3E6+lh|Xi z`kI_A;_8Z%AI5x#m9J3OTFq@%(xmw7Z&0qWctSu|HR8h8+yl^R0(gD{Yx;nGP> zIT=*lh|+Puz3Nep8suw1MBE|fjpDn38roHo?blC>@u_8K`^WawpS^<1!icKJi3Vwm zYa6M>2^G38i5G3+$lKHp&52C0tC|%u?+DQ}oUR#V=1zdQgUuUx+k%9-Ypfd}rGa|Vf>TDrIH0H|gNnAlz$V2>e$Dz3a(I5EL5%lQ@B;Whm z0M%eHz zo~HxzR6o3C&}J=9@s1hX4u0hTjXQeH?w<~Sj$4eap=Jfm;Kdgp!d>UeL5>$?ZEUNv zkckP^w!0+zoUa;zT`wySC$(p=ljt{oIO%bn(l(CLcByZosyffbaT6EB-_JahtSk`Hb_)VXBQ(U7k4K!a~L)zP8Mc%7&0<31#y`F2P#xEMF0Q* diff --git a/jtc1-01a.tex b/jtc1-01a.tex index ad822c5..71630ec 100644 --- a/jtc1-01a.tex +++ b/jtc1-01a.tex @@ -117,7 +117,7 @@ JVM ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ осущСствляСт сборку Ρ‚Π°ΠΊ Π½ \begin{figure}[H] \centering \def\svgwidth{150mm} - \input{pics/jc-01-jvm-struct.pdf_tex} + \includesvg{pics/jc-01-jvm-struct.svg} \label{jvm:structure} \caption{ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM} \end{figure} diff --git a/jtc5-05a.tex b/jtc5-05a.tex new file mode 100644 index 0000000..6294816 --- /dev/null +++ b/jtc5-05a.tex @@ -0,0 +1,411 @@ +% Π’ΠΎΡ‚ ΠΈ настало врСмя Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² тонкастях Ρ€Π°Π±ΠΎΡ‚Ρ‹. На этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, ΠΊΠ°ΠΊ с Π½Π΅ΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ†Π΅Π»ΠΎΠΌ, с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ. ΠœΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ содСрТимым Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ класса String, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ разбСрёмся с сСриализаторами ΠΈ дСсСриализаторами Π² Java. + +% Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ файловая систСма. +% ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅ с понятиСм Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠ· сСбя прСдставляСт ΠΈ ΠΊΠ°ΠΊ с Π½Π΅ΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. +% Π§Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ файловая систСма (File System) - FS, Π€Π‘ – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. Π’ Π΅Π΅ обязанности Π²Ρ…ΠΎΠ΄ΠΈΡ‚ структуризация, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, запись Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Она Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° физичСскоС ΠΈ логичСскоС строСниС Π΄Π°Π½Π½Ρ‹Ρ…, особСнности ΠΈΡ… формирования, управлСния, допустимый объСм Ρ„Π°ΠΉΠ»Π°, количСство символов Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΈ ΠΏΡ€. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Linux ΠΈ Windows. +% Π’ ядрС ОБ Линукс прСдусмотрСн ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π·Π°Π±Π»Π°Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ установлСнных Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. Π˜Ρ… Π·Π°Π΄Π°Ρ‡Π° – ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ. Для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ свою систСму, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡΡΡŒ Π½Π° прСдстоящиС потрСбности: обСспСчСниС быстродСйствия, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ восстановлСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎ стандартных, Ρ‚Π°ΠΊ ΠΈ ΠΎ спСциализированныС Π»ΠΈΠ±ΠΎ ΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах. +% Π’ ОБ Линукс Π΅Ρ‰Π΅ Π½Π° этапС установки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ прСдоставляСтся Π½Π° Π²Ρ‹Π±ΠΎΡ€ большоС количСство Π€Π‘, Π²ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΅ ядро. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ запросам ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Linux ΠΈ Windows NT (с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ NTFS). Для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Windows Π½Π΅ прСдусмотрСно возмоТности Π²Ρ‹Π±ΠΎΡ€Π° Π²ΠΈΠ΄Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ здСсь Π±ΡƒΠ΄ΡƒΡ‚ ΠΈ строСниС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈ иСрархия самих Π€Π‘. +% ОБ Линукс Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΈ ТСсткого диска ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² – GPT, MBR. Π—Π΄Π΅ΡΡŒ указываСтся ΠΌΠ΅Ρ‚ΠΊΠ° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, адрСс Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ размСщСния: Ρ‚ΠΎΡ‡ΠΊΠΈ старта ΠΈ Ρ„ΠΈΠ½ΠΈΡˆΠ°. +% Π§ΡƒΡ‚ΠΎΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: +% Π˜Ρ‚Π°ΠΊ, допустим, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ SSD, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΈ зашли Π² Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ дисками», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. +% Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° управлСния дисками спросит, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² MBR ΠΈΠ»ΠΈ GPT? +% Основная загрузочная запись (MBR) ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GUID (GPT) β€” это Π΄Π²Π° стиля Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму с ТСсткого диска, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. +% Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ стилСм Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ GPT β€” Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ…. +% Однако Π½Π΅ всСгда всС Π±Ρ‹Π²Π°Π΅Ρ‚ просто. + +% Основная загрузочная запись (MBR) +% Основная загрузочная запись (MBR) β€” это ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° раздСлСния Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ сСктора. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ сСктор диска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π±ΠΈΡ‚ диск. Он Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт вашСй машинС, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ОБ. +% MBR состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй: + +% Основной Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ; +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² диска; +% ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ подпись. + + +% .tg {border-collapse:collapse;border-spacing:0;} +% .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; +% overflow:hidden;padding:10px 5px;word-break:normal;} +% .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; +% font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} +% .tg .tg-0pky{border-color:inherit;text-align:center;vertical-align:center} + + + + +% Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ +% Π”Π»ΠΈΠ½Π°, Π±Π°ΠΉΡ‚ +% ОписаниС + + + + +% 0000h +% 446 +% Код Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° + + +% 01BEh +% 16 +% Π Π°Π·Π΄Π΅Π» 1 +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² + + +% 01CEh +% 16 +% Π Π°Π·Π΄Π΅Π» 2 + + +% 01DEh +% 16 +% Π Π°Π·Π΄Π΅Π» 3 + + +% 01EEh +% 16 +% Π Π°Π·Π΄Π΅Π» 4 + + +% 01FEh +% 2 +% Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° (55h AAh) + + + + +% Основной Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ + +% MBR Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 446 Π±Π°ΠΉΡ‚ дискового пространства для основного Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°. +% Windows Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ здСсь ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ОБ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС многоступСнчатыС Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ. + +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² диска + +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² диска находится Π² Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π΅ 0, Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ 0 ΠΈ сСкторС 1 ТСсткого диска. Она Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π±ΠΈΡ‚ диск. +% MBR выдСляСт 16 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ всСго 64 Π±Π°ΠΉΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, MBR ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 4 основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ 3 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ 1 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π». Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… логичСских Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 4 Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Однако опСрационная систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² основных Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, Π° Π½Π΅ Π² логичСских Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…. + +% ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ подпись + +% 2-байтовая подпись ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† MBR. +% ВсСгда устанавливаСтся Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x55AA. +% НСкоторыС особСнности основной Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠΉ записи: + +% Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ BIOS; +% ΠœΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ 2 Π’Π‘ дискового пространства; +% ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 4 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈΠ»ΠΈ 3 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ 1 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π»; +% Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсий Windows. + +% ΠŸΠ»ΡŽΡΡ‹: + +% Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со всСми вСрсиями Windows, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии; +% ВрСбуСтся для обСспСчСния совмСстимости со старым 32-разрядным ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ; +% Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ значСния, поэтому ΠΈΠΌΠ΅Π΅Ρ‚ мСньшиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, Ρ‡Π΅ΠΌ GPT. + +% ΠœΠΈΠ½ΡƒΡΡ‹: + +% Максимальная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π° составляСт 2 Π’Π‘; +% ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ 4 основными Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ»ΠΈ 3 основными Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΈ 1 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ; +% НС устойчив ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ MBR; +% НС ΠΈΠΌΠ΅Π΅Ρ‚ встроСнного исправлСния ошибок для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ BIOS. + + +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GUID (GPT) +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GUID (GPT) β€” это ΡΡ‚ΠΈΠ»ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» прСдставлСн Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ United Extensible Firmware Interface (UEFI). GPT Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ MBR. +% КАРВИНКА +% Π‘Ρ‚ΠΈΠ»ΡŒ GPT Π½ΠΎΠ²Π΅Π΅, Π³ΠΈΠ±Ρ‡Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ MBR. GPT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ Π±Π»ΠΎΠΊΠΎΠ² (LBA) для указания Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ LBA0, Π·Π°Ρ‚Π΅ΠΌ LBA1, LBA2, … ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. +% ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ логичСский Π±Π»ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 512 Π±Π°ΠΉΡ‚. GPT Ρ…Ρ€Π°Π½ΠΈΡ‚ Π·Π°Ρ‰ΠΈΡ‚Π½ΡƒΡŽ MBR Π² LBA0, основной Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ GPT Π² LBA1 ΠΈ записи Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π² LBA2 β€” LBA33. +% Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° GPT состоит ΠΈΠ·: + +% Защитная MBR; +% Основной Ρ‚Π΅Π³ GPT; +% Записи Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²; +% Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ GPT. + + +% Защитная MBR + +% Защитная MBR β€” это пространство, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² GPT для ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ. Оно находится Π² LBA0. БистСма, которая Π½Π΅ распознаСт GPT, скорСС всСго, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ диски GPT. Π­Ρ‚ΠΎ обСспСчиваСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с систСмами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ GPT. Защитная MBR ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ вСсь диск, Π»ΠΈΠ±ΠΎ 2 Π’Π‘, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ мСньшС. + +% Основной Ρ‚Π΅Π³ GPT + +% ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ GPT ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ LBA1–LBA33 GPT. +% LBA1 состоит ΠΈΠ· основного Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° GPT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Он Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт объСм свободного мСста Π½Π° дискС. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи Ρ€Π°Π·Π΄Π΅Π»Π° располоТСны Π² LBA2 – LBA33. КаТдая запись ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ 128 Π±Π°ΠΉΡ‚, ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ LBA ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ 4 записи. ВСорСтичСски GPT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ бСсконСчноС количСство Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Однако Π² Windows GPT ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ 128 Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… (32 LBA x 4 записи Ρ€Π°Π·Π΄Π΅Π»Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ LBA). +% Π­Ρ‚ΠΈ LBA хранят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… диска ΠΈ ΠΈΡ… располоТСнии. + +% Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ + +% Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±Π»ΠΎΠΊΠΈ диска, ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π² стилС GPT, Π³Π΄Π΅ хранятся фактичСскиС Π΄Π°Π½Π½Ρ‹Π΅. +% На дискС с 512-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ сСкторами ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Π»ΠΎΠΊ находится Π² LBA34. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π½Π° дискС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GPT прСдставляСт собой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² соотвСтствии с записями Π² Primary GPT, диск Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GPT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 128 Ρ‚ΠΎΠΌΠΎΠ². Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ MBR, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΎΠΌ Π² GPT ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ основным Ρ‚ΠΎΠΌΠΎΠΌ. +% Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎ 128 ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΠΌΠΎΠ², способных Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ 128 Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² Π½Π° дискС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GPT. + +% Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ GPT + +% Π‘Ρ…Π΅ΠΌΠ° GPT Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ копия основного GPT Ρ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ Π² послСдних сСкторах диска. +% ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ LBA33 – LBA1. +% Π­Ρ‚ΠΎ обСспСчиваСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ схСмы GPT, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ Π½Π° случай поврСТдСния ΠΈΠ»ΠΈ сбоя основного GPT. +% ΠŸΠ»ΡŽΡΡ‹: + +% Максимальная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π° 9.4ZB (Π—Π΅Ρ‚Ρ‚Π°Π±Π°ΠΉΡ‚); +% ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ 128 ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²; +% Устойчив ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ GPT, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ GPT; +% Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UEFI, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ бСзопасная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, быстрый запуск ΠΈ Ρ‚. Π΄. + + +% MBR ΠΏΡ€ΠΎΡ‚ΠΈΠ² GPT: различия +% Различия ΠΌΠ΅ΠΆΠ΄Ρƒ MBR ΠΈ GPT Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: +% 1. ВрСбования ΠΊ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ΅. +% ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ устройством ΠΈ встроСнноС Π² само устройство. +% Базовая систСма Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° (BIOS) ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ интСрфСйс встроСнного ПО (UEFI) β€” это Π΄Π²Π΅ встроСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСгодня ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСны Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. +% BIOS являСтся старым ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈ Π² настоящСС врСмя ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ статус. +% Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ MBR трСбуСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ°Ρ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° BIOS, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ GPT, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ спСцификации UEFI, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ EFI. +% ВСорСтичСски Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ОБ с дисками с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ MBR Π² систСмах с ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΎΠΉ EFI. Однако Windows Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ диски Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Ρ‹ GPT для использования UEFI. +% Если ваш диск Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Ρ‹ MBR, Windows прСдоставляСт инструмСнт Β«diskpartΒ» для прСобразования Π΅Π³ΠΎ Π² GPT Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ тСорСтичСски Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ОБ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ вСрсиСй BIOS ΠΈ дисками с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT. +% Однако Windows этого Π½Π΅ позволяСт. +% 2. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Windows +% Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии Windows, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° 32-разрядных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, совмСстимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с дисками с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ MBR. +% Windows 8 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ вСрсии ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ диски с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT ΠΈ MBR. +% Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ UEFI Π½Π° 32-разрядных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GPT. +% 64-разрядныС вСрсии Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсий Windows ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ с дисков с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ с Π½ΠΈΡ…. +% 3. Максимальная Ρ‘ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π° +% ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ диска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» MBR, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 2 Π’Π‘. +% Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ MBR Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСса ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² с использованиСм 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. +% Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСктора составляСт 512 Π±Π°ΠΉΡ‚. +% Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, тСорСтичСский ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, составляСт (2^32-1) x 512 Π±Π°ΠΉΡ‚ = 2 Π’ΠΈΠ‘ (2,19 Π’Π‘). +% Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GPT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅. +% Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, тСорСтичСский ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ диска с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT составляСт (2^64-1) x 512 Π±Π°ΠΉΡ‚ = 8 ZiB (9,44 ZB). +% Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Windows Π² настоящСС врСмя ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ 256 Π’Π‘ каТдая. +% 4. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² +% Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, MBR выдСляСт 16 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ всСго 64 Π±Π°ΠΉΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, MBR ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 4 основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ 3 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ 1 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π». +% Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство логичСских Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. +% Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ОБ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² основной Ρ€Π°Π·Π΄Π΅Π». Π Π°Π·Π΄Π΅Π» GPT, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, тСорСтичСски ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². +% Однако Π΅Π³ΠΎ рСализация Π² Windows ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 128 Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих 128 Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ основным Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ. +% Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ 128 ΠΊΠΎΠΏΠΈΠΉ ОБ, установлСнных Π½Π° дискС с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ GPT. +% 5. Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ +% Π₯отя Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ MBR, Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ GPT Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ быстрСС Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСкоторая Ρ€Π°Π·Π½ΠΈΡ†Π° Π² скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. +% Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ MBR ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ BIOS, Π° GPT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ UEFI. Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ BIOS ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ процСсс Power On Self Test (POST), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт, Π³ΠΎΡ‚ΠΎΠ²ΠΎ Π»ΠΈ всё ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. ПослС этого ΠΎΠ½ ΠΈΡ‰Π΅Ρ‚ MBR для запуска Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ядро ОБ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ запускаСт Windows. +% Напротив, UEFI Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ EFI ΠΏΡ€ΠΈ запускС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ядро, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ запускаСт Windows. Быстрый запуск ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ UEFI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ POST для Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². +% 6. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… +% MBR β€” это простая схСма Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Π΄Π΅Π»Ρ‹ MBR ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² случаС поврСТдСния Ρ€Π°Π·Π΄Π΅Π»Π°. +% GPT раздСляСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, схСма GPT прСдоставляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ GPT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π² случаС поврСТдСния основного GPT. А Ρ‚Π°ΠΊΠΆΠ΅, GPT ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ бСзопасной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, которая ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ вашСго процСсса Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ врСдоносными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Он Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ цикличСским ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ (CRC) для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ поврСТдСния Π΄Π°Π½Π½Ρ‹Ρ…. +% Π₯отя GPT Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ для устранСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ MBR ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΠ» Π΅Π³ΠΎ, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: + +% Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ хоста ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ядро ОБ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ процСсс запуска ОБ; +% Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² хоста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится информация ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ располоТСнии Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²; +% ВСорСтичСски ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π’ MBR это происходит ΠΈΠ·-Π·Π° возмоТности Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» Π² качСствС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство логичСских Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². GPT ΠΏΠΎ своСй конструкции ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² (хотя Π² Windows это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ составляСт 124); +% Оба ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ Π±Π»ΠΎΠΊΠΎΠ² для указания Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…; +% MBR Ρ…Ρ€Π°Π½ΠΈΡ‚ основной Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° GPT Ρ…Ρ€Π°Π½ΠΈΡ‚ Π·Π°Ρ‰ΠΈΡ‚Π½ΡƒΡŽ MBR Π² сСкторС 1 диска. + +% Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ MBR ΠΈ GPT. Настало врСмя Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° особСнности ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π² ОБ Linux, Π·Π°Ρ‚Π΅ΠΌ Π² Windows. Начнём. +% ОБ Линукс прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ свою Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму, которая ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ порядок ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΈ хранящихся Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ с ΠΈΡ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. КаТдая Π€Π‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ». Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого ΠΈ опрСдСляСтся Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС ΠΈ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π»Π΅ΠΆΠ°Ρ‚ Π² основС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ систСмы, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всСго ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’Ρ‹ΡˆΠ΅ прСдусмотрСн тСхничСский Π±Π»ΠΎΠΊ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ носитСля. Но ΠΎΠ½ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. +% ΠžΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° зависит ряд ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: + +% ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…; +% сбСрСТСниС Ρ„Π°ΠΉΠ»ΠΎΠ²; +% ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ записи; +% допустимый Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ°; +% Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти; +% способы ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ядра ΠΈ ΠΏΡ€. + +% ОбмСн ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ двумя способами: + +% Π§Π΅Ρ€Π΅Π· VFS – Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму. Π—Π΄Π΅ΡΡŒ обСспСчиваСтся слаТСнноС взаимодСйствиС ядра ОБ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмой. ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π²Ρ‹Π±ΠΎΡ€ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π€Π‘, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π΅ вникая Π² Π½ΡŽΠ°Π½ΡΡ‹ любого ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. +% Π§Π΅Ρ€Π΅Π· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π€Π‘. Π­Ρ‚ΠΎ ΡƒΠ·Π»Ρ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм ОБ. + +% Подводя ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΈΡ‚ΠΎΠ³, Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ, Ρ‡Ρ‚ΠΎ файловая систСма всякой ОБ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Linux – это нСкая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ Π½Π° ТСстком дискС ΠΈ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ структурС ядра систСмы. Он ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎ всСх Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, поддСрТивая Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ для Π½Π΅Π³ΠΎ структуру, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° для Π΅Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, управляСт Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, исходя ΠΈΠ· особСнностСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. +% Но всС ΠΆΠ΅ файловая систСма Linux ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈ свои ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ особСнности. Π’Π°ΠΊ, здСсь всС пространство Ρ€Π°Π·Π΄Π΅Π»Π° Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ Π½Π° ΡƒΠ·Π»Ρ‹ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, исходя ΠΈΠ· кратности сСктора: 1024, 2048, 4096, 8120 Π±Π°ΠΉΡ‚. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ извСстны ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠΆΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ установки ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ здСсь ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, установлСнных Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. +% ВсС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ сСгодня ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 2 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: + + +% Π–ΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. БохраняСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ манипуляций ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ позволяСт Π΅Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ диагностику систСмы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒΡŽ ΠΊ сбоям Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ цСлостности Π΄Π°Π½Π½Ρ‹Ρ…. + + +% НС ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. Π—Π΄Π΅ΡΡŒ Π½Π΅ прСдусмотрСно сбСрСТСниС Π»ΠΎΠ³ΠΎΠ², Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ сохранности ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Но Π·Π°Ρ‚ΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ЀМ Π±ΠΎΠ»Π΅Π΅ быстрыС. + + +% ΠŸΡ€ΠΈ установкС Π½Π° ПК Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… разновидностях Linux: + + +% Ext (extended) FS. Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ файловая систСма, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ…. Π‘Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΅Ρ‰Π΅ Π² 1992 Π³ΠΎΠ΄Ρƒ. Π’ основС Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π»Π΅ΠΆΠ°Π»Π° Π€Π‘ UNIX. Основная Π·Π°Π΄Π°Ρ‡Π° состояла Π² Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ классичСской Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы MINIX, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ ограничСния ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ администрирования. БСгодня ΠΎΠ½Π° примСняСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ. + + +% Ext2. Вторая, Π±ΠΎΠ»Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ вСрвия Π€Π‘, паявшаяся Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ Π² 1993 Π³ΠΎΠ΄Ρƒ. По своСй структурС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Ext. ИзмСнСния ΠΊΠΎΡΠ½ΡƒΠ»ΠΈΡΡŒ интСрфСйса, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. УвСличился объСм памяти, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Максимально допустимый объСм Ρ„Π°ΠΉΠ»ΠΎΠ² для хранСния (указываСтся Π² настройках) – 2 Π’Π‘. Π’Π²ΠΈΠ΄Ρƒ нСвысокой пСрспСктивности примСняСтся Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π΅Π΄ΠΊΠΎ. + + +% Ext3. Π’Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Extended FS, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² использованиС Π² 2001 Π³ΠΎΠ΄Ρƒ. Π£ΠΆΠ΅ относится ΠΊ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈ – измСнСния, обновлСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эти дСйствия Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹. ПослС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ПК, такая Π€Π‘ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ благодаря Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ Π² систСму ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. + + +% Ext4. Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Extended FS, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ Π² 2006 Π³ΠΎΠ΄Ρƒ. Π—Π΄Π΅ΡΡŒ максимально ΡƒΠ±Ρ€Π°Π½Ρ‹ всСвозмоТныС ограничСния, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсиях. БСгодня ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав большСй части дистрибутивов Линукс. ΠŸΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ Π΅Π΅ нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ, Π½ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ здСсь Π² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅. Π’ Unix систСмах примСняСтся повсСмСстно. + + +% ВсС эти Ρ‚ΠΈΠΏΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‡Ρ‚ΠΎ ΠΈ опрСдСляСт ΠΈΡ… ΡƒΠ·ΠΊΠΎΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π». Π£Π·Π½Π°Ρ‚ΡŒ Π²ΠΈΠ΄ NFS, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉΡΡ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ file -s. +% Наряду с основными, прСдусмотрСны ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ File System: + + +% JFS. ЖурналируСмая систСма, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ ΠΈΠ· основной Π³Ρ€ΡƒΠΏΠΏΡ‹, разработанная спСциалистами IBM ΠΏΠΎΠ΄ AIX UNIX. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ постоянством ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ трСбованиями ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° многопроцСссорных ПК. Но Π² Π΅Π΅ ΠΆΡƒΡ€Π½Π°Π»Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ссылки лишь Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ сбой, автоматичСски подтянутся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ вСрсии Π΄Π°Π½Π½Ρ‹Ρ…. + + +% ReiserFS. Π‘ΠΎΠ·Π΄Π°Π½Π° Гансом Π Π°ΠΉΠ·Π΅Ρ€ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ Линукс ΠΈ Π½Π°Π·Π²Π°Π½Π° Π² Π΅Π³ΠΎ Ρ‡Π΅ΡΡ‚ΡŒ. По своСй структурС – это ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° Ext3, Π½ΠΎ с Π±ΠΎΠ»Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ возмоТностями. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ нСбольшиС Ρ„Π°ΠΉΠ»Ρ‹ Π² Π±ΠΎΠ»Π΅Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ функционирования. Но Π² случаС Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ элСктроэнСргии Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚. + + +% XFS. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: Π² Π»ΠΎΠ³ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. Из прСимущСств Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ быстроту Ρ€Π°Π±ΠΎΡ‚Ρ‹ с объСмной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ мСсто для хранСния Π² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², Π° Π²ΠΎΡ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ – нСльзя. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ риск ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ элСктроэнСргии. + + +% Btrfs. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒΡŽ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Π°ΠΌ ΠΈ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Удобная Π² Ρ€Π°Π±ΠΎΡ‚Π΅, позволяСт Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² OpenSUSE ΠΈ SUSE Linux. Но обратная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π½Π΅ΠΉ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π°, Ρ‡Ρ‚ΠΎ услоТняСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. + + +% F2FS. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Бамсунг. Π£ΠΆΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ядро Линукс. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для взаимодСйствия с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π»Π΅Ρˆ-памяти. Π˜ΠΌΠ΅Π΅Ρ‚ ΠΎΡΠΎΠ±ΡƒΡŽ структуру: Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ разбиваСтся Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Ρ‰Π΅ дСлятся. + + +% OpenZFS. Π­Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΊΠ°ΠΊΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для Ubuntu – ΠΎΠ½Π° автоматичСски Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ОБ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 6 Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ поврСТдСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, автоматичСским восстановлСниСм, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ…. + + +% Π’ ядрС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС Π€Π‘, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅, - Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ нСпосрСдствСнно Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ срСдС. Бюда относят сСтСвыС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΈ систСмы для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ: + + +% EncFS. Π¨ΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ пСрСсохраняСт ΠΈΡ… Π² этом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ. Надо ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π€Π‘ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ Π² Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. + + +% Aufs. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ File Systems ΠΌΠΎΠΆΠ½ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·Π΄Π΅Π». + + +% NFS. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π€Π‘ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ устройства. + + +% Π’Π°ΠΊΠΆΠ΅, Π΅ΡΡ‚ΡŒ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы: + + +% Tmpfs. ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ размСщСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² нСпосрСдствСнно Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ПК. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ созданиС Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅. ΠŸΡ€ΠΈ нСобходимости Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. + + +% Procfs. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Π² ΠΏΠ°ΠΏΠΊΠ΅ proc. Π‘ΡƒΠ΄Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ процСссов, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π² систСмС ΠΈ нСпосрСдствСнно Π² ядрС Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. + + +% Sysfs. Вакая Π€Π‘ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ядра Π²ΠΎ врСмя выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ. + + +% Бколько ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ всяких Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎΠΎΠ±Ρ‰Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Linux: + + +% Regular File, ΠΎΠ½ΠΈ ΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для хранСния Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΈ символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ТСсткая ссылка, вСдущая Π½Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Если этой ссылкС ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Named Pipe, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». + + +% Device File – Ρ„Π°ΠΉΠ»Ρ‹ для устройств, Ρ‚ΡƒΠ½Π½Π΅Π»Π΅ΠΉ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ физичСских устройствах, прСдставлСнными Π² Линукс Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠœΠΎΠ³ΡƒΡ‚ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈ Π±Π»ΠΎΠΊΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ дисководам, ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΌ, ΠΌΠΎΠ΄Π΅ΠΌΠ°ΠΌ, воспринимая ΠΈΡ… ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹Ρ…. + + +% Soft Link, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ мягкая (символьная) ссылка. ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… носитСлях ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ процСссС копирования, пСрСмСщСния ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ссылки, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ опСрация Π½Π°Π΄ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ. + + +% ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ быстрый ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой Ρ„Π°ΠΉΠ» с дирСкториями ΠΈ указатСлями Π½Π° Π½ΠΈΡ…. Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‚Π΅ΠΊΠ°: Π² ΠΏΠ°ΠΏΠΊΠ°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹, Π° Π² дирСкториях – Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. + + +% Π‘Π»ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ устройства. Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ интСрфСйс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для взаимодСйствия ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ. + + +% ΠšΠ°Π½Π°Π»Ρ‹ ΠΈ сокСты. ΠžΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° взаимодСйствиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… процСссов Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. + + + +% Windows +% Π”Π°Π»Π΅Π΅ приступим ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ всСй Π»ΠΈΠ½Π΅ΠΉΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм для Windows, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΎΠ½ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ систСмы ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈΡΡŒ Π² процСссС становлСния Windows ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Windows 8. +% ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° NTFS ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ практичСски всСго: ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, надСТности ΠΈ эффСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ) Π½Π° дискС. Π’Π°ΠΊ, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных Ρ†Π΅Π»Π΅ΠΉ создания NTFS Π±Ρ‹Π»ΠΎ обСспСчСниС скоростного выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, запись), Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставлСниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй: сТатиС Π΄Π°Π½Π½Ρ‹Ρ…, восстановлСниС ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² систСмы Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… дисках ΠΈ Ρ‚.Π΄. +% Π”Ρ€ΡƒΠ³ΠΎΠΉ основной Ρ†Π΅Π»ΡŒΡŽ создания NTFS Π±Ρ‹Π»Π° рСализация ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ бСзопасности, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы FAT, FAT32 Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ годились. ИмСнно Π² NTFS ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠ΅ (Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа). +% Π‘Π½Π°Ρ‡Π°Π»Π° рассмотрим ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ характСристики Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм, Π° ΠΏΠΎΡ‚ΠΎΠΌ остановимся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅, для большСй наглядности, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. +% Ѐайловая систСма FAT для соврСмСнных ТСстких дисков просто Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ (Π²Π²ΠΈΠ΄Ρƒ Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… возмоТностСй). Π§Ρ‚ΠΎ касаСтся FAT32, Ρ‚ΠΎ Π΅Π΅ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΡƒΠΆΠ΅ с натяТкой. +% Если ΠΊΡƒΠΏΠΈΡ‚ΡŒ ТСсткий диск Π½Π° 1000 Π“Π‘, Ρ‚ΠΎ Π²Π°ΠΌ придСтся Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². А Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΌΠΎΠ½Ρ‚Π°ΠΆΠΎΠΌ, Ρ‚ΠΎ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² 4 Π“Π± ΠΊΠ°ΠΊ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°. +% ВсСх пСрСчислСнных нСдостатков лишСна файловая систСма NTFS. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ вдаваясь Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ возмоТности Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы NTFS, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Π² Π΅Π΅ ΠΏΠΎΠ»ΡŒΠ·Ρƒ. + +% .tg {border-collapse:collapse;border-spacing:0;} +% .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; +% overflow:hidden;padding:10px 5px;word-break:normal;} +% .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; +% font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} +% .tg .tg-0pky{border-color:inherit;text-align:center;vertical-align:center} + + + + +% Ѐайловая систСма +% ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ + + +% Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠΌΠ° +% ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° + + + + +% FAT +% ΠžΡ‚ 1.44 ΠœΠ‘ Π΄ΠΎ 4 Π“Π‘ +% 2Π“Π‘ + + +% FAT32 +% ВСорСтичСски Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΠΌΠ° ΠΎΡ‚ 512 ΠœΠ‘ Π΄ΠΎ 2 Π’Π±Π°ΠΉΡ‚. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π΅ поддСрТиваСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы +% 4Π“Π‘ + + +% NTFS +% ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ составляСт 1,44 ΠœΠ‘, Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ - 2 Π’Π±Π°ΠΉΡ‚. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сТатия Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы для Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ Ρ‚ΠΎΠΌΠΎΠ². +% ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ лишь Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΎΠΌΠ° (ВСорСтичСски - 264 Π±Π°ΠΉΡ‚ минус 1 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ - 244 Π±Π°ΠΉΡ‚ минус 64 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°) + + + +% Π’ΠΎΠΎΠ±Ρ‰Π΅ использованиС FAT32 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ лишь Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ установлСно нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Π° какая-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ NTFS. Но Π½Π° сСгодняшний дСнь Ρ‚Π°ΠΊΠΈΡ… практичСски Π½Π΅Ρ‚. Π Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρƒ сСбя Π°Π½Ρ‚ΠΈΠΊΠ²Π°Ρ€ΠΈΠ°Ρ‚ Ρ‚ΠΈΠΏΠ° Windows 98. + +% Ѐайловая систСма FAT + +% Ѐайловая систСма FAT (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ Π½Π΅ΠΉ понимаСтся FAT 16) Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° достаточно Π΄Π°Π²Π½ΠΎ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСбольшими дисковыми ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ объСмами, простой структурой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². АббрСвиатура FAT Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ File Allocation Table (с Π°Π½Π³Π». Ρ‚Π°Π±Π»ΠΈΡ†Π° размСщСния Ρ„Π°ΠΉΠ»ΠΎΠ²). Π­Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° размСщаСтся Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ‚ΠΎΠΌΠ°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ хранятся Π΄Π²Π΅ Π΅Π΅ ΠΊΠΎΠΏΠΈΠΈ (Π² цСлях обСспСчСния большСй устойчивости). +% Данная Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой для поиска Ρ„Π°ΠΉΠ»Π° ΠΈ опрСдСлСния Π΅Π³ΠΎ физичСского располоТСния Π½Π° ТСстком дискС. Π’ случаС поврСТдСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (ΠΈ Π΅Π΅ ΠΊΠΎΠΏΠΈΠΈ) Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой становится Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Она просто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³Π΄Π΅ ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», Π³Π΄Π΅ ΠΎΠ½ начинаСтся ΠΈ Π³Π΄Π΅ заканчиваСтся. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях говорят, Ρ‡Ρ‚ΠΎ файловая систСма Β«ΡƒΠΏΠ°Π»Π°Β». +% Ѐайловая систСма FAT ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft для дискСт. Волько ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ½ΠΈ стали Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ТСстких дисков. Π‘Π½Π°Ρ‡Π°Π»Π° это Π±Ρ‹Π»Π° FAT12 (для дискСт ΠΈ ТСстких дисков Π΄ΠΎ 16 ΠœΠ‘), Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ½Π° пСрСросла Π² FAT16, которая Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π² ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой MS-DOS 3.0. +% Π”Π°Π»Π΅Π΅ ΠΎΠ½Π° поддСрТиваСтся Π² Windows 3.x, Windows 95, Windows 98, Windows NT/2000 ΠΈ Ρ‚.Π΄. + +% Ѐайловая систСма FAT32 + +% Начиная с Windows 95 OSR2, компания Microsoft Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах FAT32 - Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΠΈΠ΄Π²ΡƒΡ…Ρ€Π°Π·Ρ€ΡΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ FAT. Π§Ρ‚ΠΎ ΠΏΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ, тСхничСский прогрСсс Π½Π΅ стоит Π½Π° мСстС ΠΈ возмоТностСй FAT 16 стало явно нСдостаточно. +% По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π½Π΅ΠΉ FAT32 стала ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ дискам, Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… объСмов (объСм диска Π΄ΠΎ 2 Π’Π±Π°ΠΉΡ‚). +% Π’ FAT32 Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивноС расходованиС дискового пространства (ΠΏΡƒΡ‚Π΅ΠΌ использования Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… кластСров). Π’Ρ‹Π³ΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с FAT16 составляСт порядка 10.15%. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании FAT32 Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ диск ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записано ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° 10. 15% большС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании FAT16. +% ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ FAT32 обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. +% ΠžΠ±ΡƒΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ это двумя сущСствСнными нововвСдСниями: + +% Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ пСрСмСщСния ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ FAT (Ссли основная копия ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° поврСТдСния); +% Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ хранСния Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ систСмных Π΄Π°Π½Π½Ρ‹Ρ…. + + +% Ѐайловая систСма NTFS + +% Ни ΠΎΠ΄Π½Π° ΠΈΠ· вСрсий FAT Π½Π΅ обСспСчиваСт Ρ…ΠΎΡ‚ΡŒ сколько-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ уровня бСзопасности. Π­Ρ‚ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… (сТатия, ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ) ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ нСобходимости создания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. И Сю стала файловая систСма NT (NTFS) +% NTFS β€” ΠΎΡ‚ Π°Π½Π³Π». New Technology File System, файловая систСма Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, основным Π΅Π΅ достоинством являСтся Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ: для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ NTFS ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΏΡ€Π°Π²Π° доступа (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π½Π° запись ΠΈ Ρ‚.Π΄.). Благодаря этому сущСствСнно ΠΏΠΎΠ²Ρ‹ΡΠΈΠ»Π°ΡΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы. +% НазначСниС ΠΏΡ€Π°Π² доступа позволяСт Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ/Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. НапримСр, Π½Π΅ обладая достаточными ΠΏΡ€Π°Π²Π°ΠΌΠΈ, посторонний ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ смоТСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ». Или Π½Π΅ обладая достаточными ΠΏΡ€Π°Π²Π°ΠΌΠΈ, вирус Π½Π΅ смоТСт ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ». +% ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, NTFS, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ…. +% Начиная с Windows 2000, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия NTFS 5.0, которая, ΠΏΠΎΠΌΠΈΠΌΠΎ стандартных, позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности: +% Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… - эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ рСализуСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ надстройкой NTFS, которая называСтся Encrypting File System(EFS) - ΡˆΠΈΡ„Ρ€ΡƒΡŽΡ‰Π°Ρ файловая систСма. Благодаря этому ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°. +% ДисковыС ΠΊΠ²ΠΎΡ‚Ρ‹ - стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ) Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° дискС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. +% Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТится большоС количСство ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пустых Π±Π°ΠΉΡ‚ΠΎΠ². Ѐайловая систСма NTFS позволяСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. +% ИспользованиС ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ - позволяСт Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ Ρ‚ΠΎΠΌΠ°ΠΌ. +% И Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ NTFS - Ρ‚ΠΎΡ‡ΠΊΠΈ монтирования. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΡ‡Π΅ΠΊ монтирования ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π½Π΅ связанныС ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ диски Π² систСмС, ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ диск ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠ°. Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ для сбора Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, находящСйся Π² систСмС. +% НапослСдок Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ссли для Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ NTFS Π±Ρ‹Π»ΠΈ установлСны ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²Π° доступа, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ Π΅Π³ΠΎ скопировали Π½Π° Ρ€Π°Π·Π΄Π΅Π» FAT, Ρ‚ΠΎ всС Π΅Π³ΠΎ ΠΏΡ€Π°Π²Π° доступа ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, присущиС NTFS, Π±ΡƒΠ΄ΡƒΡ‚ утСряны. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π±Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. + +% Устройство NTFS. Главная Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΉΠ»ΠΎΠ² MFT + +% Как ΠΈ любая другая файловая систСма, NTFS Π΄Π΅Π»ΠΈΡ‚ всС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ мСсто Π½Π° кластСры - ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹. NTFS ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ кластСров - ΠΎΡ‚ 512 Π±Π°ΠΉΡ‚ Π΄ΠΎ 64 ΠšΠ±Π°ΠΉΡ‚. Однако общСпринятым стандартом считаСтся кластСр Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 4 ΠšΠ±Π°ΠΉΡ‚. ИмСнно ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ сущСствования кластСров ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ. +% Если Ρƒ вас Ρ€Π°Π·ΠΌΠ΅Ρ€ кластСра составляСт 4 ΠšΠ±Π°ΠΉΡ‚ (Ρ‡Ρ‚ΠΎ скорСС всСго), Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5 ΠšΠ±Π°ΠΉΡ‚, Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ 8 ΠšΠ±Π°ΠΉΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΠ΄ΠΈΠ½ кластСр ΠΎΠ½ Π½Π΅ помСщаСтся, Π° ΠΏΠΎΠ΄ Ρ„Π°ΠΉΠ» дисковоС пространство выдСляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кластСрами. +% Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ NTFS-диска имССтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» - MFT (Master Allocation Table - главная Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΉΠ»ΠΎΠ²). Π’ этом Ρ„Π°ΠΉΠ»Π΅ содСрТится Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ всСх ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° дискС Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° NTFS создаСт ΠΈ заполняСт Π² MFT ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ запись, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится информация ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… Ρ„Π°ΠΉΠ»Π°, содСрТимом Ρ„Π°ΠΉΠ»Π°, имя Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚.ΠΏ. +% Помимо MFT, имССтся Π΅Ρ‰Π΅ 15 ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (вмСстС с MFT - 16), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдоступны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ИмСна всСх ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа $, Π½ΠΎ стандартными срСдствами ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡ… ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π΅ прСдставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Π”Π°Π»Π΅Π΅ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° прСдставлСны основныС ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»Ρ‹: + +% SMFT - сам MFT. +% $MFTmirr - копия ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 16 записСй MFT, размСщСнная посСрСдинС диска (Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ). +% $LogFile - Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Турналирования. +% $Volume - слуТСбная информация: ΠΌΠ΅Ρ‚ΠΊΠ° Ρ‚ΠΎΠΌΠ°, вСрсия Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, ΠΈ Ρ‚.Π΄. +% $AttrDef - список стандартных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° Ρ‚ΠΎΠΌΠ΅. +% $ - ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. +% $Bitmap - ΠΊΠ°Ρ€Ρ‚Π° свободного мСста Ρ‚ΠΎΠΌΠ°. +% $Boot - Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ сСктор (Ссли Ρ€Π°Π·Π΄Π΅Π» Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ). +% $Quota - Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ записаны ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° использованиС дискового пространства. +% $Upcase - Ρ„Π°ΠΉΠ»-Ρ‚Π°Π±Π»ΠΈΡ†Π° соотвСтствия Π·Π°Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΈ прописных Π±ΡƒΠΊΠ² Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ‚ΠΎΠΌΠ΅. +% НуТСн Π² основном ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² NTFS ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ 65 тысяч Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… символов, ΠΈΡΠΊΠ°Ρ‚ΡŒ большиС ΠΈ ΠΌΠ°Π»Ρ‹Π΅ эквивалСнты ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ. + +% Π§Ρ‚ΠΎ касаСтся ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС NTFS, Ρ‚ΠΎ ΠΎΠ½ условно дСлится Π½Π° Π΄Π²Π΅ части. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 12% диска отводятся ΠΏΠΎΠ΄ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ MFT-Π·ΠΎΠ½Ρƒ - пространство, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ растСт ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ» MFT. +% Π—Π°ΠΏΠΈΡΡŒ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π² эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. MFT-Π·ΠΎΠ½Π° всСгда дСрТится пустой. Π­Ρ‚ΠΎ дСлаСтся для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ самый Π³Π»Π°Π²Π½Ρ‹ΠΉ слуТСбный Ρ„Π°ΠΉΠ» (MFT) Π½Π΅ фрагмСнтировался ΠΏΡ€ΠΈ своСм ростС. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ 88% диска ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ пространство для хранСния Ρ„Π°ΠΉΠ»ΠΎΠ². +% Однако ΠΏΡ€ΠΈ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ дискового пространства MFT-Π·ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ сама ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ (Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ дискомфорта Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅. ΠŸΡ€ΠΈ этом Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π±Ρ‹Π²ΡˆΡƒΡŽ MFT-Π·ΠΎΠ½Ρƒ. +% Π’ случаС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ высвобоТдСния дискового пространства MFT-Π·ΠΎΠ½Π° снова Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Π΅Π΄ΠΈΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ, Π° нСсколькими частями Π½Π° дискС). Π’ этом Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ, просто считаСтся, Ρ‡Ρ‚ΠΎ систСма Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Π°, ΠΊΠΎΠ³Π΄Π° MFT-Ρ„Π°ΠΉΠ» Π½Π΅ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½. +% ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ Π½Π΅ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ MFT-Ρ„Π°ΠΉΠ»Π΅ вся файловая систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС. БоотвСтствСнно Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ являСтся MFT-Ρ„Π°ΠΉΠ», Ρ‚Π΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ файловая систСма. +% Π§Ρ‚ΠΎ касаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€Π° MFT-Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ вычисляСтся, исходя ΠΈΠ· 1 ΠœΠ‘ Π½Π° 1000 Ρ„Π°ΠΉΠ»ΠΎΠ². + diff --git a/pics/jc-01-jvm-struct.pdf b/pics/jc-01-jvm-struct.pdf deleted file mode 100644 index b6cb3b48ce5d9b53c04e117e0ecae76405ef53d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810 zcmah~c~BEq7X0>ppI4htU)&xEqN$o_$pR8gU00VB!)HnGB$Tv`)h%01`q<1OR|4w89UN-NS{2{D(ZpKuE!-+u|(Z!1d$ixXM2{qDEfaG@qbyqys%{X`jpn7 z!**dmhZ&W#+Dy*AU+0A!ZSNf@EZ(~9LJaqKK~&Q8y32uFl-sDi@&iFNmYz2!<*jL3 zW#4(>OMOhNb4k)c!$8|P!>sl%61x(F^<_&_!-EQLuG^PuHXo=D5zK7=5XtQE$lndlz6J>Ax3lw zoTS2`eo#IvzR`Q>seJySsCc{6Or!{ z8=Z6ImONYgCO>Q5C|L9`zoAL7pb<+HSJ^&ajQU?rG%p_gHe-JFNQA$7NAlgIs#l`9 zcjCU>{48kdE?N@UwCsK;en_zMyQkar7fQ^OX{E!Sj*$4*sa->Y>%p;EDX;1l2E9t0 z`D`#+9yl$nZ{r{tn%QZzZR%FpRTkGq*zDV}YeUtcX8V4@mJJU3?-pgM>g$Nd4$Gn+ z_VfsfTB2r2jCpp#GIP^euan2cN}udZ&CP2`vl~SNk_38QQ0cH;Sx2X<@0-FXn@zo` zwtCH@uvI~KIN`C_mLslz9-ca|WPW|RZNT-09~&d4g=Zo;czW(y?as(&gH-R{J)5ZJ z)&^0)P|f#cqaDI>;gj{9D~i85r8RdFk<{8{l4}R9-!r3ryQjzzTBjZ-K78X_hVK(z z!cLKp7{AZ2M3W6=X(2x&w>pG_?E_>o9)JU-Ft`Ay+#BEkRZ;K>n+k5gC;W}uAtvnr zG<1ue252y)p@Ad7Ep~$`mez6b=tQpu(P}N_!x+IP2w}ioOu9)hLh4Qcf{?h0r5;iV z2{v2K${8I84;ujA{9~QInq|`TRw0ggw4f7Fhrl>kN@vjXo>f~W-~hm}Y4pTO4z+yg zbghb3uJ+-R`~eUw&t@)=BAK=1N2@MqDrTD1Y@!~ zm4RTEQKzZkmF1+Ov@8Q~H(cW84xAD=PH$L&!eT>I!&3SLt;*oWuo`D)iz7L_&^U$# zGKHT)fnn}a3={jo>4RYs5tRJI;X4K;iD3kkBDf}?&ZLAOj}snH2TqCm_=Fg5L*xzj zplyDN|Ia?}8|q1*K{0enNG<$8En#XIoiEQPC*KtWMi7`3C-_iE+!Yfo$1rEB(nzdI zGgezU#Zk$O#*#G8C&M^{-to@J((woeJP;W7_yA&(6p60v|DKyGS3+$!*GC4 ge2mxux_Acg6tQs5z)>t`$q*;S9*Co(-+Be|FHJ9VrvLx| diff --git a/pics/jc-01-jvm-struct.svg b/pics/jc-01-jvm-struct.svg index 4fe4198..08b184f 100644 --- a/pics/jc-01-jvm-struct.svg +++ b/pics/jc-01-jvm-struct.svg @@ -7,7 +7,7 @@ viewBox="0 0 210 297" version="1.1" id="svg5" - inkscape:version="1.1.2 (b8e25be833, 2022-02-05)" + inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)" sodipodi:docname="jc-01-jvm-struct.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -26,14 +26,14 @@ showgrid="true" showborder="false" borderlayer="false" - inkscape:zoom="1.1929181" - inkscape:cx="138.31629" - inkscape:cy="520.15308" - inkscape:window-width="2560" - inkscape:window-height="1387" - inkscape:window-x="-8" - inkscape:window-y="22" - inkscape:window-maximized="1" + inkscape:zoom="8.6634554" + inkscape:cx="594.39332" + inkscape:cy="469.78945" + inkscape:window-width="1511" + inkscape:window-height="832" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="0" inkscape:current-layer="layer1" inkscape:pageshadow="2"> class loader method area + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265" + x="66" + y="124">method area stack java threads + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265" + x="152" + y="124">java threads native internal threads JIT compiler garbage collector + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265" + x="91" + y="164">garbage collector # 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 literal 0 HcmV?d00001 diff --git a/scenarios/jtc4-04b.tex b/scenarios/jtc4-04b.tex index 2bdba97..a912a8d 100644 --- a/scenarios/jtc4-04b.tex +++ b/scenarios/jtc4-04b.tex @@ -35,7 +35,9 @@ Season current = Season.SPRING; System.out.println(current); Season[] seasons = Season.values(); for (Season s : seasons) { System.out.printf("s ", s); } -ИмСнно Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ†ΠΈΠΊΠ» foreach для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ массиву, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ пСрСчислСний Π½Π΅Ρ‚ индСксов, Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π²ΠΎΠ·ΡŒΠΌΡ‘Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт пСрСчислСния, присвоит Π΅ΠΌΡƒ имя s Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° Π΄Π²Π΅ строки Π²Ρ‹ΡˆΠ΅, ΠΈ сдСлаСт эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π‘ доступной Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ взят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ \\ \hline +ИмСнно Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ†ΠΈΠΊΠ» foreach для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ массиву, для лаконичности записи. Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π΅Π³ΠΎ особСнностях ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π»Π΅ΠΊΡ†ΠΈΠΉ. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π²ΠΎΠ·ΡŒΠΌΡ‘Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт пСрСчислСния, присвоит Π΅ΠΌΡƒ имя s Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° Π΄Π²Π΅ строки Π²Ρ‹ΡˆΠ΅, ΠΈ сдСлаСт эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π‘ доступной Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ взят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ \\ \hline + +% +++ ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€_Π˜Π»ΡŒΠ½Π°Ρ€. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ коррСктная Ρ„Ρ€Π°Π·Π° "ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ пСрСчислСний Π½Π΅Ρ‚ индСксов". seasons - это ΡƒΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом с индСксами, скорСС ΠΌΡ‹ просто Ρ‚ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ foreach Ρ†ΠΈΠΊΠ». Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-порядковый Π½ΠΎΠΌΠ΅Ρ€ & Π’Π°ΠΊΠΆΠ΅ Π² пСрСчислСния встроСн ΠΌΠ΅Ρ‚ΠΎΠ΄ ordinal() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ порядковый Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ константы (нумСрация начинаСтся с 0). @@ -64,6 +66,28 @@ enum Color { for (Color c : Color.values()) { System.out.printf("s(s) ", c, c.getCode()); } \\ \hline +Вопросы для самопровСрки & +\begin{enumerate} +\item ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ Π½ΡƒΠΆΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹: 3 + \begin{enumerate} + \item вСсти ΡƒΡ‡Ρ‘Ρ‚ созданных Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²; + \item вСсти ΡƒΡ‡Ρ‘Ρ‚ классов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅; + \item вСсти ΡƒΡ‡Ρ‘Ρ‚ схоТих ΠΏΠΎ смыслу явлСний Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅; + \end{enumerate} +\item ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ - это: 2 + \begin{enumerate} + \item массив + \item класс + \item ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ + \end{enumerate} +\item ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² пСрСчислСнии - это: 3 + \begin{enumerate} + \item статичСскоС ΠΏΠΎΠ»Π΅ + \item статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ + \item статичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ + \end{enumerate} +\end{enumerate} \\ \hline + ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ (Nested) классы & ВзглянСм Π½Π° Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅, скаТСм Ρ‚Π°ΠΊ, комплСксный ΠΌΠΎΠΌΠ΅Π½Ρ‚ - Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы. На самом Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ ΠΊ этой Ρ‚Π΅ΠΌΠ΅ ΠΈ сСйчас Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ слоТно. \\ \hline 03-Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅-классы & Π’ Java Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов ΠΈ ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π½Π° Π΄Π²Π° Π²ΠΈΠ΄Π°: Non-static nested classes β€” нСстатичСскиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы. По-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈΡ… Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ inner classes β€” Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы; Static nested classes β€” статичСскиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы. НСпосрСдствСнно Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΅Ρ‰Ρ‘ Π½Π° Π΄Π²Π° ΠΏΠΎΠ΄Π²ΠΈΠ΄Π°. Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ просто Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ классом, ΠΎΠ½ Π΅Ρ‰Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ классом (local class); Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ классом (anonymous class). АнонимныС классы ΠΌΡ‹ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ, ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ Π½Π° нСсколько Π»Π΅ΠΊΡ†ΠΈΠΉ. \\ \hline @@ -103,7 +127,7 @@ Orange orange = new Orange(); orange.squeezeJuice(); И кстати Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π°ΠΌ это пригодится такая связь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ классов называСтся ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ассоциация ΠΈ агрСгация Π° ΠΈΠΌΠ΅Π½Π½ΠΎ эта композиция. \\ \hline -На ΠΎΠ΄Π½ΠΎΠΌ слайдС 04-апСльсин ΠΈ 04-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ-апСльсин & Если класс ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² этот класс ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… вмСстС. ИспользованиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Оба ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° достаточно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Мой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ "Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ" ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π²Π½Π΅ ΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΡƒ классу доступ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСльзя, поэтому созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса происходит Π² конструкторС основного класса - Π² апСльсинС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сока Π³Π΄Π΅ Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² конструкторС. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ доступ ΠΈΠ·Π²Π½Π΅ ΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ классу сок Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· основной класс апСльсина. Как ΠΈ собствСнно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сока ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ апСльсина. \\ \hline +На ΠΎΠ΄Π½ΠΎΠΌ слайдС 04-апСльсин ΠΈ 04-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ-апСльсин & Если класс ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² этот класс ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… вмСстС. ИспользованиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Оба ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° достаточно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Мой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ "Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ" ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π²Π½Π΅ ΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ классу доступ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСльзя, поэтому созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса происходит Π² конструкторС основного класса - Π² апСльсинС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сока Π³Π΄Π΅ Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² конструкторС. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ доступ ΠΈΠ·Π²Π½Π΅ ΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ классу сок Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· основной класс апСльсина. Как ΠΈ собствСнно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сока ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ апСльсина. \\ \hline ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ появлСниС элСмСнтов пСрСчислСния) \begin{itemize} @@ -133,6 +157,28 @@ Orange orange = new Orange(); orange.squeezeJuice(); Π’Π°ΠΊΠΆΠ΅, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Ρ€ΠΎΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² наслСдования. Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ слоТная Ρ‚Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ. \\ \hline +Вопросы для самопровСрки & +\begin{enumerate} +\item Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс: 1 + \begin{enumerate} + \item Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ; + \item это слуТСбный класс; + \item Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° внСшнСго класса; + \end{enumerate} +\item Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ с использованиСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов: 2 + \begin{enumerate} + \item остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ + \item увСличиваСтся + \item ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ + \end{enumerate} +\item БтатичСскиС поля Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов: 2 + \begin{enumerate} + \item ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ + \item ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ константными + \item Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ + \end{enumerate} +\end{enumerate} \\ \hline + 03-Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅-классы & Как ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ классы это Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ поэтому стоит Π»ΠΈ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² это довольно Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎ синтаксичСски язык позволяСт это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ β€” ΠΈΡ… мСсто Π² структурС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· схСмы ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ классы β€” это ΠΏΠΎΠ΄Π²ΠΈΠ΄ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов. Однако, Ρƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… классов Π΅ΡΡ‚ΡŒ ряд Π²Π°ΠΆΠ½Ρ‹Ρ… особСнностСй ΠΈ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов. Π“Π»Π°Π²Π½ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΡ… объявлСнии. \\ \hline Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ-Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ-класс & Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°. Π§Π°Ρ‰Π΅ всСго β€” Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° внСшнСго класса. НапримСр, это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: @@ -167,6 +213,8 @@ animal.performBehavior(true); экзСмпляры Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… классов, ΠΊΠ°ΠΊ ΠΈ экзСмпляры Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ экзСмпляр, ссылка Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСявно пСрСдаСтся всСм конструкторам Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… классов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ: ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ полям ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ экзСмпляра, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса связан с экзСмпляром класса, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса связан с экзСмпляром Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ класса). Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса Π±Π΅Π· привязки ΠΊ экзСмпляру внСшнСго класса. Π’ΠΎ Π΅ΡΡ‚ΡŒ спСрва Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан экзСмпляр внСшнСго класса, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса. \\ \hline +% ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€_Π˜Π»ΡŒΠ½Π°Ρ€. Π’ΡƒΡ‚ Ρƒ Π½Π°Ρ€ΠΎΠ΄Π° ΠΌΠΎΠ·Π³ΠΈ закипят ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, вся Π½Π°Π΄Π΅ΠΆΠ΄Π° Π½Π° ΠΏΡ€Π΅Π·Ρƒ, которая это ΠΎΠΆΠΈΠ²ΠΈΡ‚ ΠΈ сдСлаСт Π±ΠΎΠ»Π΅Π΅ понятным) Π‘ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ классами всСгда Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ побольшС Π·Π°Π΄Π°Ρ‡Π΅ΠΊ ΠΈΠΌ Π½Π° сСминары Π΄Π°Ρ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ явно Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΈ смысл ΠΈΡ… использования + ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° БтатичСскиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы & ΠœΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ нСстатичСских Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классах (non-static nested classes) ΠΈΠ»ΠΈ, ΠΏΡ€ΠΎΡ‰Π΅, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классах. Рассмотрим статичСскиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы (static nested classes). Π§Π΅ΠΌ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…? \\ \hline Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-статичСский-класс & ΠŸΡ€ΠΈ объявлСнии Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π½Π°ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static. Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ класс нашСго ΠΊΠΎΡ‚ΠΈΠΊΠ° ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ voice() Π½Π° статичСский класс. ΠžΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ это, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΆΠ΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅, Ρ‡Ρ‚ΠΎ допустим, ΠΌΡ‹ находимся Π΄ΠΎΠΌΠ° ΠΈ Ρƒ нас ΠΎΡ‚Ρ€Ρ‹Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ, ΠΌΡ‹ ΡΠ»Ρ‹ΡˆΠΈΠΌ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π²ΡƒΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доносятся ΠΈΠ· ΠΎΠΊΠ½Π°. Из этих Π·Π²ΡƒΠΊΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊ мурчания ΠΊΠΎΡ‚ΠΈΠΊΠ°. И Ρ‚ΡƒΡ‚ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ‚ΠΈΠΊΠ° ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Π° ΠΏΡ€ΠΈ этом ΡΠ»Ρ‹ΡˆΠΈΠΌ. @@ -201,6 +249,22 @@ Cat.Voice voice = new Cat.Voice(100 + i); voice.sayMur(); НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Если ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” Π΄Π°, статичСская пСрСмСнная класса сущСствуСт Π² СдинствСнном экзСмплярС. Но ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ классу static ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ лишь Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ содСрТат ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ внСшнСго класса. Π’ случаС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с ΠΊΠΎΡ‚ΠΈΠΊΠΎΠΌ - ΠΌΡ‹ ΡΠ»Ρ‹ΡˆΠΈΠΌ ΠΌΡƒΡ€Ρ‡Π°Π½ΠΈΠ΅ с Ρ€Π°Π·Π½ΠΎΠΉ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ нСпонятно ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΡ‚ΠΈΠΊΠ° ΠΈΠ»ΠΈ это Π΄Ρ€ΡƒΠ³ΠΎΠΉ. А самих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ \\ \hline +Вопросы для самопровСрки & +\begin{enumerate} +\item Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс: 1 + \begin{enumerate} + \item Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ; + \item это Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс; + \item всСгда ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ; + \end{enumerate} +\item БтатичСский Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ классо Π±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ свойствами, Ρ‡Ρ‚ΠΎ: 2 + \begin{enumerate} + \item константный ΠΌΠ΅Ρ‚ΠΎΠ΄ + \item Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс + \item статичСскоС ΠΏΠΎΠ»Π΅ + \end{enumerate} +\end{enumerate} \\ \hline + ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций & НаконСц-Ρ‚ΠΎ, Ρ‚Π΅ΠΌΠ°, которая ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΎΡ‚Ρ‚ΠΎΡ€ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΡƒΠΌΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅. \\ \hline Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ - это отступлСниС ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°, нСсоотвСтствиС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ порядку Π²Π΅Ρ‰Π΅ΠΉ & Π”ΡƒΠΌΠ°ΡŽ, Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΎΠΉ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ философской части. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π° этот Π²ΡΡ‚ΡƒΠΏΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ слайд, ΠΎΠ½ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΈ Π² Π½Ρ‘ΠΌ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного. ΠœΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ язык программирования? Π­Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°Π±ΠΎΡ€ инструмСнтов. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅ΡΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ Π²ΠΎΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ - Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊ. Π£ Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠ° Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ всСвозмоТных красок, кистСй, холстов, ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠ΅ΠΉ, ΠΌΠΎΠ»ΡŒΠ±Π΅Ρ€Ρ‚, ластик ΠΈ ΠΊΡƒΡ‡Π°-ΠΌΠ½ΠΎΠ³ΠΎ-Ρ‡Π΅Π³ΠΎ-Π΅Ρ‰Ρ‘. Π­Ρ‚ΠΎ всё Π΅Π³ΠΎ инструмСнты, с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ свои Π²Π°ΠΆΠ½Ρ‹Π΅ худоТСствСнныС ΡˆΡ‚ΡƒΠΊΠΈ. Π’ΠΎΠΆΠ΅ самоС для программиста, Ρƒ программиста Π΅ΡΡ‚ΡŒ язык программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Π΅ΠΌΡƒ инструмСнты: Ρ†ΠΈΠΊΠ»Ρ‹, условия, классы, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ООП, Ρ„Ρ€Π΅ΠΉΠΌΠΎΡ€ΠΊΠΈ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ... Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ - это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· инструмСнтов. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π½Π° Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ программиста. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½ достаточно спСцифично, ΠΈ являСтся достаточно высокоуровнСвым, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ· сСбя Π½Π΅ΠΊΡƒΡŽ подсистСму языка, которая являСтся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ любого ΠΌΠ°Π»ΠΎ-мальски ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.\\ \hline @@ -280,11 +344,13 @@ throw e; 04-ΠΏΡ€ΠΎΠ±ΡƒΠΉ-Π»ΠΎΠ²ΠΈ & Π”Π°Π²Π°ΠΉΡ‚Π΅ нашС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠ²ΠΈΡ‚ΡŒ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, ΠΈ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ - это ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡƒΠΏΠ°Π»ΠΎ, поэтому Π½Π΅ ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π»ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΎΡ‚ этого понимания Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ способ Π»ΠΎΠ²Π»ΠΈ. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ловится двухсСкционным ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ try-catch, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ сСкциСй try. Π­Ρ‚ΠΎ сСкция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдполагаСтся Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ. А Π² сСкции catch пишСм имя класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π»ΠΎΠ²ΠΈΠΌ, ΠΈ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ экзСмпляр нашСго ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. БСкция catch Π»ΠΎΠ²ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ всСх Π΅Π³ΠΎ наслСдников. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ. РСкомСндуСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ максимально ΡƒΠ·ΠΊΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ сСкции catch, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ досконально Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ. Ну ΠΈ Π΅Ρ‰Ρ‘ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ-ΠΆΠ΅. Π‘Π΅ΠΊΡ†ΠΈΠΉ catch ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΎΠ½ уничтоТаСтся, дальшС ΠΎΠ½ Π½Π΅ поднимаСтся, ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ catch Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚. ΠœΡ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΆΠ΅ насильно ΠΏΡƒΠ»ΡŒΠ½ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом throw. \\ \hline -? & Π’Π°ΠΊ Π²ΠΎΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ наш ΠΌΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹ обязаны Π»ΠΈΠ±ΠΎ вынСсти объявлСниС этого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΌΡ‹ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ нСпосрСдствСнно Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ Ρƒ вас Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ скомпилируСтся. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ слуТит ИО это сокращСниС ΠΎΡ‚ ΠΈΠ½ΠΏΡƒΡ‚-Π°ΡƒΡ‚ΠΏΡƒΡ‚ ΠΈ гСнСрируСтся, ΠΊΠΎΠ³Π΄Π°, Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ ΠΈ ΠΎΠ½Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ произвСсти Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. На Π΄Π΅Π»Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½ΠΊΠ° Π·Π°Π³Π»ΡŽΡ‡ΠΈΠ»Π°, Ρ„Π»Π΅ΡˆΠΊΡƒ Π²Ρ‹Π΄Π΅Ρ€Π½ΡƒΠ»ΠΈ, устройство Ρ‚Π΅Π»Π΅ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π² ΠΌΠΈΠΊΡ€ΠΎΠ²ΠΎΠ»Π½ΠΎΠ²ΠΊΡƒ, ΠΈ всё, случился ИОЭксСпшн, Π½Π΅ смогла ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. БоотвСтствСнно, ΡƒΠΆΠ΅ ΠΎΡ‚ этого ИОЭ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π²Ρ€ΠΎΠ΄Π΅ FileNotFoundException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ обязаны ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. НапримСр, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π° Ρ„Π°ΠΉΠ»Π° Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС Π½Π΅ оказалось, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ чтСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. \\ \hline +04-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ? & Π’Π°ΠΊ Π²ΠΎΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ наш ΠΌΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных ΠΏΡƒΡ‚ΠΈ: Π²Ρ‹ обязаны Π»ΠΈΠ±ΠΎ вынСсти объявлСниС этого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΌΡ‹ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ нСпосрСдствСнно Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ Ρƒ вас Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ скомпилируСтся. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ слуТит ИО это сокращСниС ΠΎΡ‚ ΠΈΠ½ΠΏΡƒΡ‚-Π°ΡƒΡ‚ΠΏΡƒΡ‚ ΠΈ гСнСрируСтся, ΠΊΠΎΠ³Π΄Π°, Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ ΠΈ ΠΎΠ½Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ произвСсти Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. На Π΄Π΅Π»Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½ΠΊΠ° Π·Π°Π³Π»ΡŽΡ‡ΠΈΠ»Π°, Ρ„Π»Π΅ΡˆΠΊΡƒ Π²Ρ‹Π΄Π΅Ρ€Π½ΡƒΠ»ΠΈ, устройство Ρ‚Π΅Π»Π΅ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π² ΠΌΠΈΠΊΡ€ΠΎΠ²ΠΎΠ»Π½ΠΎΠ²ΠΊΡƒ, ΠΈ всё, случился ИОЭксСпшн, Π½Π΅ смогла ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. БоотвСтствСнно, ΡƒΠΆΠ΅ ΠΎΡ‚ этого ИОЭ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π²Ρ€ΠΎΠ΄Π΅ FileNotFoundException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ обязаны ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. НапримСр, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π° Ρ„Π°ΠΉΠ»Π° Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС Π½Π΅ оказалось, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ чтСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. \\ \hline -? & Π’ случаС, Ссли ΠΌΡ‹ выносим объявлСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² сигнатуру, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ-ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ - Π»ΠΈΠ±ΠΎ Π² Π²Ρ‹Π·ΠΎΠ²Π΅, Π»ΠΈΠ±ΠΎ вынСсти Π² сигнатуру. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π° являСтся класс RuntimeException. ВсС наслСдники ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π³ΠΎ самого, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ΡƒΠ΄Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль, индСксаутофбаунд экзСпшн Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компилятор пропускаСт, Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π² срСдС исполнСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎ названию понятно Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Π½Ρƒ ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ говорящих Π½Π°Π·Π²Π°Π½ΠΈΠΉ, Ρ‚Π°ΠΌ Π΅Ρ‰Ρ‘ содСрТится ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„Ρ‹, хотя-Π±Ρ‹ Π΄Π°ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€ строки, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. ΠžΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΎΠ΄Π½ΠΎ - Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ - Π΅Π³ΠΎ Π½Π°Π΄ΠΎ сразу ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π½Π΅Ρ‚ - Π½Π°Π΄ΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠΏΠ°Π΄Ρ‘Ρ‚. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡŽ, всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌΠΈΡ‚Π΅ это ΠΊΠ°ΠΊ расплату Π·Π° использованиС языка Java.\\ \hline +% +++ ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€_Π˜Π»ΡŒΠ½Π°Ρ€. ΠœΡ‹ Π²Ρ€ΠΎΠ΄Π΅ Π½ΠΈΠ³Π΄Π΅ ΠΏΡ€ΠΎ вынос Π² сигнатуру Π΄ΠΎ этого Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ Π΄ΠΎ этих слов ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ, Π° Ρ‚ΠΎ читаСтся Ρ‚Π°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΌΡ‹ ΠΎΠ± этом ΡƒΠΆΠ΅ сказали. -Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ ? & ВСрнёся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌΡƒ классу ΠΈ УслоТним Π΅Ρ‰Ρ‘. Π² мСтодСА Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π‘. Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅Π‘ Π²Ρ‹ΠΊΠΈΠ½Π΅ΠΌ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ IOE. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ Ρ‚ΠΎ ΠΈ начинаСтся вСсСльС. ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IOE это Π½Π΅ наслСдник Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ эксСпшСна, ΠΈ ΠΌΡ‹ обязаны ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° этапС компиляции. Π’ΡƒΡ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ. ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΡƒΠΆΠ΅ извСстный try-catch, синтаксис Π΅Π³ΠΎ Π½Π΅ совсСм ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ усилиС ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. пишСм +04-ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ & Π’ случаС, Ссли ΠΌΡ‹ выносим объявлСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² сигнатуру, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ-ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ - Π»ΠΈΠ±ΠΎ Π² Π²Ρ‹Π·ΠΎΠ²Π΅, Π»ΠΈΠ±ΠΎ вынСсти Π² сигнатуру. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π° являСтся класс RuntimeException. ВсС наслСдники ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π³ΠΎ самого, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ΡƒΠ΄Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль, индСксаутофбаунд экзСпшн Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компилятор пропускаСт, Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π² срСдС исполнСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎ названию понятно Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Π½Ρƒ ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ говорящих Π½Π°Π·Π²Π°Π½ΠΈΠΉ, Ρ‚Π°ΠΌ Π΅Ρ‰Ρ‘ содСрТится ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„Ρ‹, хотя-Π±Ρ‹ Π΄Π°ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€ строки, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. ΠžΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΎΠ΄Π½ΠΎ - Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ - Π΅Π³ΠΎ Π½Π°Π΄ΠΎ сразу ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π½Π΅Ρ‚ - Π½Π°Π΄ΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠΏΠ°Π΄Ρ‘Ρ‚. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡŽ, всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌΠΈΡ‚Π΅ это ΠΊΠ°ΠΊ расплату Π·Π° использованиС языка Java.\\ \hline + +Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚-1 & ВСрнёся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌΡƒ классу ΠΈ УслоТним Π΅Ρ‰Ρ‘. Π² мСтодСА Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π‘. Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅Π‘ Π²Ρ‹ΠΊΠΈΠ½Π΅ΠΌ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ IOE. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ Ρ‚ΠΎ ΠΈ начинаСтся вСсСльС. ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IOE это Π½Π΅ наслСдник Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ эксСпшСна, ΠΈ ΠΌΡ‹ обязаны ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° этапС компиляции. Π’ΡƒΡ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ. ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΡƒΠΆΠ΅ извСстный try-catch, синтаксис Π΅Π³ΠΎ Π½Π΅ совсСм ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ усилиС ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. пишСм try { methodB() } catch (имя класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ экзСмпляра) { }. @@ -296,7 +362,7 @@ sout(e.getMessage()). catch throw new runtimeexception(e); \\ \hline -Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ ? & Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ - ΠΌΡ‹ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пишСм +Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚-2 & Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ - ΠΌΡ‹ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пишСм throws IOE, @@ -310,7 +376,7 @@ throws IOE, Π²ΠΎΠ²ΠΎΡ‡ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ‡ΠΊΠΎΠΉ Β«ΠΈ Ρ‚Π°ΠΊ сойдёт» & Π’Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π—Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ - это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π°Ρ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация - ΡˆΡ‚Π°Ρ‚Π½Π°Ρ, ΠΈΠ»ΠΈ Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Π°Ρ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв - ситуации Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Π΅, поэтому Π½Π°Π΄ΠΎ ΡƒΡ€ΠΎΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Допустим для вашСго прилоТСния Π²ΠΎΡ‚ стопроцСнтно ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ, Π±Π΅Π· Π½Π΅Π³ΠΎ дальшС Π½Π΅Ρ‚ смысла ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚? Π―Π²Π½ΠΎ Π½Π΅ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π² Π½Π΅Π³ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΏΡ€Π°Π²Π΄Π°? Π‘Π°ΠΌΠΎΠ΅ ΠΏΠ»ΠΎΡ…ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ - Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ самоС ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ²Π΅Π»Π° сСбя ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ, Π° ΠΌΡ‹ ΠΎΠ± этом Π΄Π°ΠΆΠ΅ Π½Π΅ ΡƒΠ·Π½Π°Π»ΠΈ. Допустим ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», вывСсти Π² консоль, Π½ΠΎ ΠΌΡ‹ Π³Π»ΠΎΡ‚Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, вывСдя стСктрСйс ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ-Ρ‚Π°ΠΌ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΈ наши супСр-Π²Π°ΠΆΠ½Ρ‹Π΅ дСйствия Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈΡΡŒ. Надо Ρ€ΠΎΠ½ΡΡ‚ΡŒ. Как Ρ€ΠΎΠ½ΡΡ‚ΡŒ? Π΄Π° throw new RuntimeException(e). ΠšΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ³Π»ΠΎΡ‚ΠΈΡ‚ΡŒ. \\ \hline -Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ ? & Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ дальшС. ВсС помнят, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π°Π΄ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ? Π”Π°ΠΆΠ΅ Ссли Π½Π΅ Π·Π½Π°Π»ΠΈ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅Ρ‚Π΅. Π’ΠΎΡ‚, допустим, Ρƒ нас Π² нашСм ΠΌΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ открылся Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΎΡΡŒ, ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡƒΠΏΠ°Π» с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Π° Ρ„Π°ΠΉΠ» остался Π½Π΅Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, рСсурсы заняты. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π°ΠΆΠ΅ допишСм свой класс TestStream ΠΏΡƒΡΡ‚ΡŒ Π΅Π³ΠΎ конструктор выбрасываСт IOE, ΠΌΠ΅Ρ‚ΠΎΠ΄ read выбрасываСт IOE ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ close, Π²Π΅Π·Π΄Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ Π² read ΠΏΠΎΠΊΠ° оставляСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ throw new IOE("reading error") Π² close "closed". Π¨Ρ‚Π°Ρ‚Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΈΠ· read Π΅Π΄ΠΈΠ½ΠΈΡ‡ΠΊΡƒ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ всё ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π² ΠΌΠ΅ΠΉΠ½Π΅. Как всё Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½ΠΎ? +Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-Ρ„Π°ΠΉΠ½Π°Π»Π»ΠΈ & Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ дальшС. ВсС помнят, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π°Π΄ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ? Π”Π°ΠΆΠ΅ Ссли Π½Π΅ Π·Π½Π°Π»ΠΈ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅Ρ‚Π΅. Π’ΠΎΡ‚, допустим, Ρƒ нас Π² нашСм ΠΌΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ открылся Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΎΡΡŒ, ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡƒΠΏΠ°Π» с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Π° Ρ„Π°ΠΉΠ» остался Π½Π΅Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, рСсурсы заняты. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π°ΠΆΠ΅ допишСм свой класс TestStream ΠΏΡƒΡΡ‚ΡŒ Π΅Π³ΠΎ конструктор выбрасываСт IOE, ΠΌΠ΅Ρ‚ΠΎΠ΄ read выбрасываСт IOE ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ close, Π²Π΅Π·Π΄Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ Π² read ΠΏΠΎΠΊΠ° оставляСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ throw new IOE("reading error") Π² close "closed". Π¨Ρ‚Π°Ρ‚Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΈΠ· read Π΅Π΄ΠΈΠ½ΠΈΡ‡ΠΊΡƒ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ всё ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π² ΠΌΠ΅ΠΉΠ½Π΅. Как всё Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½ΠΎ? TestStream stream = new TestStream(); int a = stream.read() @@ -318,9 +384,9 @@ throws IOE, Π”Π°Π»Π΅Π΅ прСдставим Ρ‡Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ read Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, выбрасываСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌ Π² консоли? создали ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ? Π° Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ΅ΠΊΡ†ΠΈΡŽ finally. БСкция finally Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² любом случаС, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ. Но Ρ‚ΡƒΡ‚ Ρ‚ΠΎΠΆΠ΅ большоС спасибо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π΄ΠΆΠ°Π²Ρ‹, ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ наш ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ вынСсти Π½Π°Ρ€ΡƒΠΆΡƒ, Π° Π΅Ρ‰Ρ‘ ΠΎΠ½ оказываСтся Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° TestStream stream = null. Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. \\ \hline -Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ ? & Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ нСприятностСй. Написали ΠΌΡ‹ Π±Π»ΠΎΠΊ finally, Π²Ρ€ΠΎΠ΄Π΅ Π΄Π°ΠΆΠ΅ избавились ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°. А ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ, Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΏΡ€ΠΈ создании этого ΠΏΠΎΡ‚ΠΎΠΊΠ°? Π’ΠΎΠ³Π΄Π° получаСтся, Ρƒ нас ΠΌΠ΅Ρ‚ΠΎΠ΄ закрытия Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ссылки Π½Π° null. ΠΠ΅Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π·Π½Π°Π΅Ρ‚Π΅-Π»ΠΈ, получаСтся. Π”Π°Π²Π°ΠΉΡ‚Π΅ всё сломаСм, прям Π² конструкторС нашСго ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹ΠΊΠΈΠ½Π΅ΠΌ IOE. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ NPE Π² Π±Π»ΠΎΠΊΠ΅ finally. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ставим Π² сСкции finally условиС, ΠΈ Ссли ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ. Π’Ρ€ΠΎΠ΄Π΅ ΠΊΠ»Ρ‘Π²ΠΎ. МСняСм Ρ‚Π°ΠΊΡ‚ΠΈΠΊΡƒ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. ΠœΠ΅Ρ‚ΠΎΠ΄ чтСния всё Π΅Ρ‰Ρ‘ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ Π±Π°Ρ† ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ закрытия Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΈ Π²Ρ‹Π»Π΅Ρ‚Π΅Π»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Ну Π²ΠΎΡ‚ Ρ‚Π°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ Π² ΠΆΠΈΠ·Π½ΠΈ. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ? ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π² try-catch. Π’Ρ€ΠΎΠ΄Π΅ снова всё классно. Но ΠΈ Ρ‚ΡƒΡ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‚ΠΊΠ½ΡƒΡ‚ΡŒΡΡ Π½Π° Π½Π΅ΠΏΡ€ΠΈΡΡ‚Π½ΠΎΡΡ‚ΡŒ. Допустим, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π² любом случаС Ρ€ΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π² кэтч допишСм throw new Runtime...). Π’ΠΎΠ³Π΄Π° Ссли Ρƒ нас try ΠΏΠΎΠΉΠΌΠ°Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ Π²Ρ‹ΠΊΠΈΠ½ΡƒΠ» Π΅Π³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌ finally всё Ρ€Π°Π²Π½ΠΎ выполнится, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ‚Ρ€Ρ‘Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ. Ну Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ для нас Π²Π°ΠΆΠ½Π΅Π΅, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ - максимум Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ - это Π·Π°Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠΊΡƒ. Π’Π°ΠΊ Π΄Π΅Π»Π° обстояли Π² сСдьмой Π΄ΠΆΠ°Π²Π΅. \\ \hline +Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° & Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ нСприятностСй. Написали ΠΌΡ‹ Π±Π»ΠΎΠΊ finally, Π²Ρ€ΠΎΠ΄Π΅ Π΄Π°ΠΆΠ΅ избавились ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°. А ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ, Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΏΡ€ΠΈ создании этого ΠΏΠΎΡ‚ΠΎΠΊΠ°? Π’ΠΎΠ³Π΄Π° получаСтся, Ρƒ нас ΠΌΠ΅Ρ‚ΠΎΠ΄ закрытия Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ссылки Π½Π° null. ΠΠ΅Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π·Π½Π°Π΅Ρ‚Π΅-Π»ΠΈ, получаСтся. Π”Π°Π²Π°ΠΉΡ‚Π΅ всё сломаСм, прям Π² конструкторС нашСго ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹ΠΊΠΈΠ½Π΅ΠΌ IOE. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ NPE Π² Π±Π»ΠΎΠΊΠ΅ finally. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ставим Π² сСкции finally условиС, ΠΈ Ссли ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ. Π’Ρ€ΠΎΠ΄Π΅ ΠΊΠ»Ρ‘Π²ΠΎ. МСняСм Ρ‚Π°ΠΊΡ‚ΠΈΠΊΡƒ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. ΠœΠ΅Ρ‚ΠΎΠ΄ чтСния всё Π΅Ρ‰Ρ‘ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ Π±Π°Ρ† ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ закрытия Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΈ Π²Ρ‹Π»Π΅Ρ‚Π΅Π»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Ну Π²ΠΎΡ‚ Ρ‚Π°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ Π² ΠΆΠΈΠ·Π½ΠΈ. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ? ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π² try-catch. Π’Ρ€ΠΎΠ΄Π΅ снова всё классно. Но ΠΈ Ρ‚ΡƒΡ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‚ΠΊΠ½ΡƒΡ‚ΡŒΡΡ Π½Π° Π½Π΅ΠΏΡ€ΠΈΡΡ‚Π½ΠΎΡΡ‚ΡŒ. Допустим, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π² любом случаС Ρ€ΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π² кэтч допишСм throw new Runtime...). Π’ΠΎΠ³Π΄Π° Ссли Ρƒ нас try ΠΏΠΎΠΉΠΌΠ°Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ Π²Ρ‹ΠΊΠΈΠ½ΡƒΠ» Π΅Π³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌ finally всё Ρ€Π°Π²Π½ΠΎ выполнится, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ‚Ρ€Ρ‘Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ. Ну Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ для нас Π²Π°ΠΆΠ½Π΅Π΅, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ - максимум Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ - это Π·Π°Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠΊΡƒ. Π’Π°ΠΊ Π΄Π΅Π»Π° обстояли Π² сСдьмой Π΄ΠΆΠ°Π²Π΅. \\ \hline -Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ ? & Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΠΌ восьмая Π΄ΠΆΠ°Π²Π°? try-с-рСсурсами. ΠŸΠΎΡ‚ΠΎΠΊ - это рСсурс, абстрактноС понятиС. Как с этим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? БСйчас Π±ΡƒΠ΄Π΅Ρ‚ нСбольшоС Π·Π°Π±Π΅Π³Π°Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Ρ‘Π΄, ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ просто Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ магию. Π’Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ строго Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс Closeable. А Ρ‡Ρ‚ΠΎ это Π·Π° интСрфСйс? (Ctrl+click) Ρ‚Π°ΠΌ содСрТится всСго ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ close(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ IOE. НапишСм Π²Π΅Π·Π΄Π΅ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² нашСм тСстовом ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π—Π°Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ. Π”Π°Π»Π΅Π΅ синтаксис try-с-рСсурсами. ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ начиная с восьмой Π΄ΠΆΠ°Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Closeable. Π‘Ρ‚ΠΈΡ€Π°Π΅ΠΌ всС уТасы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ написали, пишСм +Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 04-с-рСсурсами & Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΠΌ восьмая Π΄ΠΆΠ°Π²Π°? try-с-рСсурсами. ΠŸΠΎΡ‚ΠΎΠΊ - это рСсурс, абстрактноС понятиС. Как с этим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? БСйчас Π±ΡƒΠ΄Π΅Ρ‚ нСбольшоС Π·Π°Π±Π΅Π³Π°Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Ρ‘Π΄, ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ просто Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ магию. Π’Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ строго Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс Closeable. А Ρ‡Ρ‚ΠΎ это Π·Π° интСрфСйс? (Ctrl+click) Ρ‚Π°ΠΌ содСрТится всСго ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ close(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ IOE. НапишСм Π²Π΅Π·Π΄Π΅ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² нашСм тСстовом ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π—Π°Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ. Π”Π°Π»Π΅Π΅ синтаксис try-с-рСсурсами. ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ начиная с восьмой Π΄ΠΆΠ°Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Closeable. Π‘Ρ‚ΠΈΡ€Π°Π΅ΠΌ всС уТасы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ написали, пишСм try(TestStream stream = new TestStream()) int a = stream.read(); @@ -329,7 +395,19 @@ throws IOE, И всё, ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ. Π—Π° это Ρƒ нас ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ сама Π΄ΠΆΠ°Π²Π°. Запустим ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ. Никаких close() ΠΈ finally, всё Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π‘Π°ΠΌΠΎΠ΅ классноС - Ссли ΠΌΡ‹ Π»ΠΎΠΌΠ°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ read() Ρ‚ΠΎ Ρ‚Ρ€Π°ΠΉ с рСсурсами всё Ρ€Π°Π²Π½ΠΎ наш ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚. Иногда Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π² консоль ΠΈ стСктрСйс Π²Ρ€Π°Π·Π½ΠΎΠ±ΠΎΠΉ, Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ, просто ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ‹Π»Π΅Ρ‚Π°ΡŽΡ‚ Π² ΠΏΠΎΡ‚ΠΎΠΊ error Π° Π²Ρ‹Π²ΠΎΠ΄ Π² консоль Π² стандартный Π²Ρ‹Π²ΠΎΠ΄. Ну ΠΈ Ρƒ Π½ΠΈΡ… ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ асинхронности. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ самый смак - Π»ΠΎΠΌΠ°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ закрытия, ΠΈ Π΄ΠΆΠ°Π²Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ поступит, ΠΎΠ½Π° Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΡ‚ Π½Π°Π²Π΅Ρ€Ρ… основноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ "ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½Π½ΠΎΠ΅" ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ΅ Π² стСктрСйс. По-чСловСчСски, красиво, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ, Π³Π»Π°Π· радуСтся. РСкомСндуСтся ΠΏΠΎ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. Но Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π°Π΄ΠΎ ΠΈ Ρ‚Π΅ΠΌ ΠΈ Ρ‚Π΅ΠΌ, СстСствСнно. \\ \hline -& ПослСднСС Π½Π° сСгодня ΠΏΡ€ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ это наслСдования ΠΈ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π΅ΠΌΠ° Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ большая ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ слоТная ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ классы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ОсобСнно Π·Π°ΡΡ‚Ρ€ΡΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ программирования ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… скорСС всСго Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ сказано Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ это Ρ‚ΠΎΠΆΠ΅ классы ΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ наслСдники ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ СдинствСнноС Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ это Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ систСма ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ это Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈ сами Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с собствСнными смыслами ΠΈ сообщСниями ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ вмСсто стандартных Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ Π»ΡŽΠ±Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ СдинствСнноС Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ это Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π΅ рСкомСндуСтся Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ классов throwable ΠΈ error ΠΊΠΎΠ³Π΄Π° описываСтС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ сохраняСтся ΠΏΡ€ΠΈ наслСдованиС поэтому создав наслСдник RuntimeException Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½Π΅ провСряСмыС Π½Π° этапС написания ΠΊΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ \\ \hline +% ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€_Π˜Π»ΡŒΠ½Π°Ρ€. Π‘ΠΌΠΎΡ‚Ρ€ΠΈ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ‚ΡƒΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ…ΠΎΠ΄Ρƒ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎ рСсурс Π½Π°Π΄ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Π΅Π· Π½Π΅Π³ΠΎ ΠΊΠΎΡΡ‚Ρ‹Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ слоТно, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π² этом ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ. Π”ΠΎΠ±Π°Π²ΡŒ поТалуйста Ρ€Π΅Π·ΡŽΠΌΠ΅ Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ… послС Ρ‚Π°ΠΊΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ². Мол, Ссли ΡƒΠΆΠ΅ успСли Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒΡΡ, Ρ‚ΠΎ Π²ΠΎΡ‚ Π²Π°ΠΌ простая инструкция - ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ, Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ. ΠŸΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ Ρ‚Π°ΠΊ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π² try catch finaly. Π•ΡΡ‚ΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСкрасная ΡˆΡ‚ΡƒΠΊΠ° try с рСсурсами. для Ρ‡Π΅Π³ΠΎ всС это Π½ΡƒΠΆΠ½ΠΎ - ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ я рассказал послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ со всСм этим Π½Π° сСминарС. ΠŸΠ΅Ρ€Π΅ΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ конспСктируя нСсколько Ρ€Π°Π· ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅Ρ‚, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ это Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ классам ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒ + +03-наслСдованиС & ПослСднСС Π½Π° сСгодня ΠΏΡ€ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ это наслСдования ΠΈ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π΅ΠΌΠ° Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ большая ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ слоТная ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ классы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ОсобСнно Π·Π°ΡΡ‚Ρ€ΡΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ программирования ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… скорСС всСго Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ сказано Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ это Ρ‚ΠΎΠΆΠ΅ классы ΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ наслСдники ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ СдинствСнноС Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ это Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ систСма ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ это Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈ сами Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с собствСнными смыслами ΠΈ сообщСниями ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ вмСсто стандартных Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ Π»ΡŽΠ±Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ СдинствСнноС Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ это Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π΅ рСкомСндуСтся Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ классов throwable ΠΈ error ΠΊΠΎΠ³Π΄Π° описываСтС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ сохраняСтся ΠΏΡ€ΠΈ наслСдованиС поэтому создав наслСдник RuntimeException Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½Π΅ провСряСмыС Π½Π° этапС написания ΠΊΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ \\ \hline + +На этом ΡƒΡ€ΠΎΠΊΠ΅ & На этой Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ понятия ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы, Π±Ρ‹Π»ΠΎ нСпросто, Π½ΠΎ ΠΌΡ‹, каТСтся, ΡΠΏΡ€Π°Π²ΠΈΠ»ΠΈΡΡŒ; процСссы создания, использования ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ пСрСчислСний. Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π²Π°ΠΌ понятиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΈΡ… Ρ‚Π΅ΡΠ½ΡƒΡŽ связь с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π² Π΄ΠΆΠ°Π²Π°. Всё врСмя смотрСли Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ООП, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π· ΠΈ навсСгда Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ понятия ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ситуаций. \\ \hline + +Π”Π— & Π’ качСствС домашнСго задания +\begin{enumerate} +\item Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΄Π²Π° наслСдника класса Exception: ошибка прСобразования строки ΠΈ ошибка прСобразования столбца +\item Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ-наслСдники Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅/Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ +\item для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл 5Ρ…5 Π² сумму чисСл Π² этом массивС, ΠΏΡ€ΠΈ этом, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли строк ΠΈΠ»ΠΈ столбцов Π² исходном массивС окаТСтся Π½Π΅ 5. +\end{enumerate} +\\ \hline НС ΡΡ‚Ρ‹Π΄ΠΈΡΡŒ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π² Π·Ρ€Π΅Π»ΠΎΠΌ возрастС: Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ·Π΄Π½ΠΎ, Ρ‡Π΅ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π°. Π­Π·ΠΎΠΏ & На этом Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ рассмотрСниС основных аспСктов ООП ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, дальшС нас ΠΆΠ΄Ρ‘Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Ρ‰Ρ‘ большС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² языка. НС тСряйтС внимания, Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΌΠ½ΠΈΡ‡ΠΊΠ°ΠΌΠΈ. \\ \hline \end{longtable} diff --git a/scenarios/jtc5-05b.tex b/scenarios/jtc5-05b.tex new file mode 100644 index 0000000..03d6c68 --- /dev/null +++ b/scenarios/jtc5-05b.tex @@ -0,0 +1,514 @@ +\documentclass[../j-spec.tex]{subfiles} + +\begin{document} +\section{БпСциализация: тонкости Ρ€Π°Π±ΠΎΡ‚Ρ‹} +\begin{longtable}{|p{35mm}|p{135mm}|} +\hline +Π­ΠΊΡ€Π°Π½ & Π‘Π»ΠΎΠ²Π° \\ \hline +\endhead + +Π’ΠΈΡ‚ΡƒΠ» & ЗдравствуйтС, отвлСчёмся ΠΎΡ‚ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊ \\ \hline + +ΠžΡ‚Π±ΠΈΠ²ΠΊΠ° & ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ практичСской ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ программирования \\ \hline + +На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ & На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с понятиями Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов; процСссами создания, использования ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ пСрСчислСний. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π»ΠΈ Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ООП, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ понятия ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ситуаций. Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ понятиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΈΡ…, скаТСм Ρ‚Π°ΠΊ, Ρ„ΠΈΠ»ΠΎΡΠΎΡ„ΠΈΡŽ ΠΈ Ρ‚Π΅ΡΠ½ΡƒΡŽ связь с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π² Π΄ΠΆΠ°Π²Π°. \\ \hline + +На этом ΡƒΡ€ΠΎΠΊΠ΅ & Π’ качСствС ΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΎΠ±Ρ‰Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ отступлСния ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах ΠΈ прСдставлСнии Π΄Π°Π½Π½Ρ‹Ρ… Π² Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… устройствах; ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° популярныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° java.io, java.nio, Π±Π΅Π· особСнного погруТСния Π² ΠΈΡ… Π½Π΅Π΄Ρ€Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ всякиС слоТности. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных ссылочных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… String ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ стрингбилдСр ΠΈ стрингпул. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, На этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, ΠΊΠ°ΠΊ с Π½Π΅ΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ†Π΅Π»ΠΎΠΌ, с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ. Π£Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ содСрТимым Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ класса String, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ частично разбСрёмся с сСриализаторами ΠΈ дСсСриализаторами Π² Java. \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° файловая систСма & Настало врСмя Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² тонкастях Ρ€Π°Π±ΠΎΡ‚Ρ‹ языка Π² части общСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ со внСшним ΠΌΠΈΡ€ΠΎΠΌ, Π° Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ Π² тонкостях Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π½Π΅ совсСм эффСктивно. Π”Π°Π»Π΅Π΅ послСдуСт ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ относящийся ΠΊ Java. А Ссли ΠΎΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ относится ΠΊ языку, Π·Π°Ρ‡Π΅ΠΌ ΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠ± этом Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ? Π·Π½Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… различиях Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΠ΄ΠΈΠ²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ОБ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Ρ‹Π»Π΅Ρ‚Π°Π΅Ρ‚ с ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ грустным ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π±ΡƒΠ΄Π΅Ρ‚ слишком ΡƒΠΆ Ρ‚ΡƒΠ³ΠΎ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π½Π°ΠΏΡ€ΡΠ³Π°ΠΉΡ‚Π΅ΡΡŒ, сСгодня наша Π·Π°Π΄Π°Ρ‡Π° Π·Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ³Π΄Π° Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π²Ρ‹ Π³Π΄Π΅-Ρ‚ΠΎ Π² подсознании ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π²Π°ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ рассказывал, ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚Π΅ Π² поисковик ΠΈ ΡƒΠΆΠ΅ Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎ ΠΎΡ‚Ρ‹Ρ‰Π΅Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° свой вопрос. \\ \hline + +Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ файловая систСма? Π€Π‘ - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. Π’ Π΅Π΅ обязанности Π²Ρ…ΠΎΠ΄ΠΈΡ‚ структуризация, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, запись Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Windows-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ Linux-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ & ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅ с понятиСм Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠ· сСбя прСдставляСт ΠΈ ΠΊΠ°ΠΊ с Π½Π΅ΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. файловая систСма (File System) - FS, Π€Π‘ – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. Π’ Π΅Π΅ обязанности Π²Ρ…ΠΎΠ΄ΠΈΡ‚ структуризация, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, запись Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Она Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° физичСскоС ΠΈ логичСскоС строСниС Π΄Π°Π½Π½Ρ‹Ρ…, особСнности ΠΈΡ… формирования, управлСния, допустимый объСм Ρ„Π°ΠΉΠ»Π°, количСство символов Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ стСпСни антагонистов ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Linux ΠΈ Windows. \\ \hline + +Linux Π½Π° этапС установки прСдоставляСт Π²Ρ‹Π±ΠΎΡ€ ΠΈΠ· ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ числа Π€Π‘. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Тёсткого диска ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π€Π‘ строго ΠΏΠΎΠ΄ свои Π½ΡƒΠΆΠ΄Ρ‹. & Π’ ядрС ОБ Линукс прСдусмотрСн ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π·Π°Π±Π»Π°Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ установлСнных Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. Π˜Ρ… Π·Π°Π΄Π°Ρ‡Π° – ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ. Для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ свою систСму, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡΡΡŒ Π½Π° прСдстоящиС потрСбности: обСспСчСниС быстродСйствия, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ восстановлСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎ стандартных, Ρ‚Π°ΠΊ ΠΈ ΠΎ спСциализированныС Π»ΠΈΠ±ΠΎ ΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах. Π’ ОБ Линукс Π΅Ρ‰Π΅ Π½Π° этапС установки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ прСдоставляСтся Π½Π° Π²Ρ‹Π±ΠΎΡ€ большоС количСство Π€Π‘, Π²ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΅ ядро. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ запросам ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Linux ΠΈ Windows NT (с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ NTFS). Для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Windows Π½Π΅ прСдусмотрСно возмоТности Π²Ρ‹Π±ΠΎΡ€Π° Π²ΠΈΠ΄Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ здСсь Π±ΡƒΠ΄ΡƒΡ‚ ΠΈ строСниС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈ иСрархия самих Π€Π‘. \\ \hline + +Π Π°Π·Π΄Π΅Π»Ρ‹ GPT ΠΈ MBR & ОБ Линукс Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΈ ТСсткого диска вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² – GPT, MBR. Основная загрузочная запись (MBR) ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GUID (GPT) β€” это Π΄Π²Π° стиля Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму с ТСсткого диска, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ стилСм Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ GPT β€” Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ…. Однако Π½Π΅ всСгда всё Π±Ρ‹Π²Π°Π΅Ρ‚ просто. Основная ΠΌΡ‹ΡΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ старого Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° Π΅ΡΡ‚ΡŒ довольно ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»ΠΈΡˆΡ‘Π½ Π½ΠΎΠ²Ρ‹ΠΉ, поэтому ΠΏΠΎ возмоТности слСдуСт Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ.\\ \hline + +Основная загрузочная запись (MBR) 05-ΠœΠ‘Π  & Основная загрузочная запись (MBR) β€” это ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° раздСлСния Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ сСктора. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ сСктор диска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π±ΠΈΡ‚ диск. Он Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт вашСй машинС, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ОБ. Main Boot Record состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй: Основной Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ; Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² диска; ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ подпись. \\ \hline + +05- ΠœΠ‘Π -состав & Π˜Ρ‚Π°ΠΊ, основной Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ. MBR Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ дискового пространства для основного Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°. Windows Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ здСсь ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ОБ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС многоступСнчатыС Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ. + +Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² диска находится Π² 0ΠΌ Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π΅, 0ΠΉ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΈ 1ΠΌ сСкторС ТСсткого диска. Она Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π±ΠΈΡ‚ диск. MBR выдСляСт 16 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ всСго 64 Π±Π°ΠΉΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Main Boot Record ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 4 основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ 3 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ 1 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π». Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… логичСских Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…. Однако, опСрационная систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² основных Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, Π° Π½Π΅ Π² логичСских. + +ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ подпись - это 2-байтовая подпись, которая ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† MBR. ВсСгда устанавливаСтся Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x55AA. Π’ΠΎΠΎΠ±Ρ‰Π΅, программисты Π»ΡŽΠ±ΡΡ‚ всякиС 16-Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ подписи Π²Ρ€ΠΎΠ΄Π΅ 0xDEADBEEF, 0xA11F0DAD, 0xDEADFA11, ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… подписСй ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π½Π° самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ 0xcafebabe? ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ hexspeak. \\ \hline + +05-ΠœΠ‘Π -особСнности & Main boot record ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ особСнностями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ BIOS; ΠœΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ 2 Π’Π‘ дискового пространства; ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 4 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈΠ»ΠΈ 3 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ 1 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π»; ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсий Windows. + +Из плюсов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со всСми вСрсиями Windows, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии; ВрСбуСтся для обСспСчСния совмСстимости со старым 32-разрядным ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ; Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ значСния, поэтому ΠΈΠΌΠ΅Π΅Ρ‚ мСньшиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, Ρ‡Π΅ΠΌ GPT. +К минусам ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π° всСго Π² 2 Π’Π‘; ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ 4мя основными Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ»ΠΈ 3 основными Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΈ 1 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ; НС ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ; ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ встроСнного исправлСния ошибок для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ BIOS. \\ \hline + +Вопросы для самопровСрки & MBR - это:(1) main boot record; master BIOS recovery; minimizing binary risks \\ \hline + +GUID Partition Table (GPT) + +United Extensible Firmware Interface (UEFI) & Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GUID (GPT) β€” это ΡΡ‚ΠΈΠ»ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» прСдставлСн Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ United Extensible Firmware Interface (UEFI). GPT Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ MBR. Π‘Ρ‚ΠΈΠ»ΡŒ GPT Π½ΠΎΠ²Π΅Π΅, Π³ΠΈΠ±Ρ‡Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ MBR. GPT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ Π±Π»ΠΎΠΊΠΎΠ² для указания Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ LBA0, Π·Π°Ρ‚Π΅ΠΌ LBA1, LBA2, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ GPT Ρ…Ρ€Π°Π½ΠΈΡ‚ Π·Π°Ρ‰ΠΈΡ‚Π½ΡƒΡŽ запись MBR Π² LBA0, свой основной Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² логичСском Π±Π»ΠΎΠΊΠ΅ ΠΈ записи Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π² Π±Π»ΠΎΠΊΠ°Ρ… со Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎ Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ. \\ \hline + +Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° GPT: (постСпСнноС появлСниС) +\begin{itemize} + \item Защитная MBR; + \item Основной Ρ‚Π΅Π³ GPT; + \item Записи Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²; + \item Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ GPT. +\end{itemize} + (ΠΈ эти Ρ€Π°Π·ΠΎΠΌ) +\begin{itemize} +\item Максимальная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π° 9.4ZB; +\item 128 ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²; +\item Устойчив ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ GPT; +\item Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UEFI. +\end{itemize} +& GPT состоит ΠΈΠ·: +Π—Π°Ρ‰ΠΈΡ‚Π½ΠΎΠΉ основной Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠΉ записи. Защитная MBR β€” это пространство, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² для ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ. Оно находится Π² Π½ΡƒΠ»Π΅Π²ΠΎΠΌ логичСском Π±Π»ΠΎΠΊΠ΅ адрСсации. БистСма, которая Π½Π΅ распознаСт Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², скорСС всСго, Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ диски с Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΆΠ΅ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° MBR обСспСчиваСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с систСмами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ GPT. Защитная MBR ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ вСсь диск, Π»ΠΈΠ±ΠΎ 2 Π’Π‘, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ мСньшС. +%% +Π”Π°Π»Π΅Π΅ основной Ρ‚Π΅Π³ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎ 33ΠΉ логичСскиС Π±Π»ΠΎΠΊΠΈ адрСсации. LBA1 состоит ΠΈΠ· основного Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° GUID Partition Table, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Он Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт объСм свободного мСста Π½Π° дискС. +%% +Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ - это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±Π»ΠΎΠΊΠΈ диска, ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π² стилС GUID Partition Table, Π³Π΄Π΅ хранятся фактичСскиС Π΄Π°Π½Π½Ρ‹Π΅. На дискС с 512-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ сСкторами ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Π»ΠΎΠΊ это 34ΠΉ логичСский Π±Π»ΠΎΠΊ. +%% + Π‘Ρ…Π΅ΠΌΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ копия основного GPT Ρ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ Π² послСдних сСкторах диска. Π­Ρ‚ΠΎ обСспСчиваСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ схСмы GPT, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ Π½Π° случай поврСТдСния ΠΈΠ»ΠΈ сбоя основного GPT. +%% +Из явных плюсов, Максимальная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π° 9.4ZB (Π—Π΅Ρ‚Ρ‚Π°Π±Π°ΠΉΡ‚); ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ 128 ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²; Устойчив ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ GPT, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ GPT; Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UEFI, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ бСзопасная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, быстрый запуск ΠΈ Ρ‚. ΠΏ. \\ \hline + +MBR vs. GPT (постСпСнноС появлСниС) +\begin{enumerate} +\item ВрСбования ΠΊ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ΅: BIOS vs UEFI +\item ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Windows: Ρ…32 vs Ρ…64 +\item Максимальная Ρ‘ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π°: (232-1) Ρ… 512 Π±Π°ΠΉΡ‚ = 2,19Π’Π‘ vs (264-1) x 512 Π±Π°ΠΉΡ‚ = 9,44 ZB +\item ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²: 4 (ΠΈΠ»ΠΈ 3+1) vs 128 +\item Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: BIOS vs UEFI +\item Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… +\end{enumerate} & Π Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΡ Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ различия ΠΌΠ΅ΠΆΠ΄Ρƒ MBR ΠΈ GPT Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: +ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ устройством ΠΈ встроСнноС Π² само устройство. Базовая систСма Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° (BIOS) ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ интСрфСйс встроСнного ПО (UEFI) β€” это Π΄Π²Π΅ встроСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСгодня ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСны Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ MBR трСбуСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ°Ρ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° BIOS, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ GPT, это Ρ‡Π°ΡΡ‚ΡŒ спСцификации UEFI. Если ваш диск Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Ρ‹ MBR, Windows прСдоставляСт инструмСнт Β«diskpartΒ» для прСобразования Π΅Π³ΠΎ Π² GPT Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. +%% +Windows 7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии Windows, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° 32-разрядных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, совмСстимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с дисками с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ MBR. Windows 8 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ вСрсии ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ диски с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT ΠΈ MBR. 64-разрядныС вСрсии Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсий Windows ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ с дисков с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ с Π½ΠΈΡ…. +%% +ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ диска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» MBR, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 2 Π’Π‘. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ MBR Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСса ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² с использованиСм 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² GPT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ адрСса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, тСорСтичСский ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ диска с Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ GPT составляСт Π±ΠΎΠ»Π΅Π΅ 9ZB. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Windows Π² настоящСС врСмя ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ 256Π’Π‘ каТдая. +%% +MBR выдСляСт 16 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ всСго 64 Π±Π°ΠΉΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, MBR ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 4 основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ 3 основных Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ 1 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство логичСских Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ОБ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² основной. Π Π°Π·Π΄Π΅Π» GPT, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, тСорСтичСски ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ рСализация Π² Windows ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 128, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ основным. +%% +Π₯отя Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ MBR, Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ GPT Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ быстрСС Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСкоторая Ρ€Π°Π·Π½ΠΈΡ†Π° Π² скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ MBR ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ BIOS, Π° GPT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ UEFI. +%% +MBR β€” это простая схСма Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Π΄Π΅Π»Ρ‹ MBR ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² случаС поврСТдСния Ρ€Π°Π·Π΄Π΅Π»Π°. GPT раздСляСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅, GPT ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ бСзопасной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, которая Ρ‡ΡƒΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ процСсса Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ врСдоносными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ \\ \hline + +Вопросы для самопровСрки & Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ GPT?(2) General partition trace; GUID partition table; Greater pass timing \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы & Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ устройство ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΌΡ‹ΡˆΠΊΠ° ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°. Настало врСмя Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° особСнности ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС.\\ \hline + +Π€Π‘ - это Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ Π½Π° ТСстком дискС ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти & файловая систСма всякой ОБ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Linux – это нСкая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ Π½Π° ТСстком дискС ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ структурС ядра систСмы. Он ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎ всСх Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, поддСрТивая Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ для Π½Π΅Π³ΠΎ структуру, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° для Π΅Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, управляСт Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, исходя ΠΈΠ· особСнностСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.\\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° Как обстоят Π΄Π΅Π»Π° Π² Linux & НачинаСм рассмотрСниС всяких нСпонятных явлСний ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ с Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅.\\ \hline + +На Ρ‡Ρ‚ΠΎ влияСт файловая систСма? +\begin{enumerate} +\item ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…; +\item сбСрСТСниС Ρ„Π°ΠΉΠ»ΠΎΠ²; +\item ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ записи; +\item допустимый Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ°; +\item Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти; +\item способы ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ядра +\item ΠΈ ΠΏΡ€. +\end{enumerate} & ОБ Линукс прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ свою Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму, которая ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ порядок ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΈ хранящихся Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ с ΠΈΡ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. КаТдая Π€Π‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ». Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого ΠΈ опрСдСляСтся Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС ΠΈ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π»Π΅ΠΆΠ°Ρ‚ Π² основС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ систСмы, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всСго ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. ΠžΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ администратор ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, зависит ряд ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ: ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ записи; ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…; сбСрСТСниС Ρ„Π°ΠΉΠ»ΠΎΠ²; допустимый Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ°; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти; ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ \\ \hline + +Π€Π‘. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅, Π½Π΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. +\begin{itemize} +\item Ext (extended) FS; +\item Ext2, 3, 4; +\item JFS, ReiserFS, XFS, Btrfs, F2FS; +\item EncFS, Aufs, NFS; +\item Tmpfs, Procfs, Sysfs; +\end{itemize} & ВсС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ сСгодня ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 2 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: Π–ΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. Π‘ΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ манипуляций ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π΅Ρ‘ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ диагностику систСмы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒΡŽ ΠΊ сбоям Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ цСлостности Π΄Π°Π½Π½Ρ‹Ρ…. ΠΈ НС ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. Π—Π΄Π΅ΡΡŒ Π½Π΅ прСдусмотрСно сбСрСТСниС Π»ΠΎΠ³ΠΎΠ², Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ сохранности ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Но Π·Π°Ρ‚ΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π±ΠΎΠ»Π΅Π΅ быстрыС. + +ΠŸΡ€ΠΈ установкС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· мноТСства Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм прСдставлСнных Π½Π° слайдС. \\ \hline + +Π€Π°ΠΉΠ»Ρ‹ Π² Linux (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ появлСниС) +\begin{itemize} +\item Regular File +\item Device File +\item Soft Link +\item Directories +\item Block devices and sockets +\end{itemize} & Π’ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, хранятся Ρ„Π°ΠΉΠ»Ρ‹. Π€Π°ΠΉΠ»Ρ‹ Π² линукс - это особСнная ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ катСгория Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ОБ - всё Ρ„Π°ΠΉΠ». И всС Ρ„Π°ΠΉΠ»Ρ‹, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, дСлятся Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. +%% +ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для хранСния Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΈ символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ТСсткая ссылка, вСдущая Π½Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Если этой ссылкС ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Named Pipe, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». +%% +Ρ„Π°ΠΉΠ»Ρ‹ для устройств, Ρ‚ΡƒΠ½Π½Π΅Π»Π΅ΠΉ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ физичСских устройствах, прСдставлСнными Π² Линукс Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠœΠΎΠ³ΡƒΡ‚ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈ Π±Π»ΠΎΠΊΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ дисководам, ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΌ, ΠΌΠΎΠ΄Π΅ΠΌΠ°ΠΌ, воспринимая ΠΈΡ… ΠΊΠ°ΠΊ простой Ρ„Π°ΠΉΠ» с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. +%% +мягкая (символьная) ссылка. ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… носитСлях ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ процСссС копирования, пСрСмСщСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎ ссылкС, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ опСрация Π½Π°Π΄ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ. +%% +ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ быстрый ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой Ρ„Π°ΠΉΠ» с дирСкториями ΠΈ указатСлями Π½Π° Π½ΠΈΡ…. Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‚Π΅ΠΊΠ°: Π² ΠΏΠ°ΠΏΠΊΠ°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π° Π² дирСкториях – Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. +%% +Π‘Π»ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ устройства. Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ интСрфСйс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для взаимодСйствия ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ. ΠšΠ°Π½Π°Π»Ρ‹ ΠΈ сокСты. ΠžΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° взаимодСйствиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… процСссов Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° Как обстоят Π΄Π΅Π»Π° Π² Windows & рассмотрим всю Π»ΠΈΠ½Π΅ΠΉΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм для Windows, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΎΠ½ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ систСмы ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈΡΡŒ Π² процСссС становлСния этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы \\ \hline + +Ѐайловая систСма FAT(16) File Allocation Table (с Π°Π½Π³Π». Ρ‚Π°Π±Π»ΠΈΡ†Π° размСщСния Ρ„Π°ΠΉΠ»ΠΎΠ²) + +MS-DOS 3.0, Windows 3.x, Windows 95, Windows 98, Windows NT/2000 & Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° достаточно Π΄Π°Π²Π½ΠΎ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСбольшими дисковыми ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ объСмами, простой структурой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π­Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° размСщаСтся Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ‚ΠΎΠΌΠ°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ хранятся Π΄Π²Π΅ Π΅Π΅ ΠΊΠΎΠΏΠΈΠΈ (Π² цСлях обСспСчСния большСй устойчивости). Данная Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой для поиска Ρ„Π°ΠΉΠ»Π° ΠΈ опрСдСлСния Π΅Π³ΠΎ физичСского располоТСния Π½Π° ТСстком дискС. Π’ случаС поврСТдСния ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Π΅Π΅ ΠΊΠΎΠΏΠΈΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой становится Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Она просто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³Π΄Π΅ ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», Π³Π΄Π΅ ΠΎΠ½ начинаСтся ΠΈ Π³Π΄Π΅ заканчиваСтся. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях говорят, Ρ‡Ρ‚ΠΎ файловая систСма Β«ΡƒΠΏΠ°Π»Π°Β». систСма ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft для дискСт. Волько ΠΏΠΎΡ‚ΠΎΠΌ Π΅Ρ‘ стали ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ТСстких дисков. Π‘Π½Π°Ρ‡Π°Π»Π° это Π±Ρ‹Π»Π° FAT12 (для дискСт ΠΈ ТСстких дисков Π΄ΠΎ 16 ΠœΠ‘), Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ½Π° пСрСросла Π² FAT16, которая Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π² ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой MS-DOS 3.0. Π”Π°Π»Π΅Π΅ ΠΎΠ½Π° поддСрТиваСтся Π² Windows 3.x, Windows 95, Windows 98, Windows NT/2000 ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ….\\ \hline + +Ѐайловая систСма FAT32 +\begin{itemize} +\item Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСмСщСния ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° +\item Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ +\end{itemize} +& Начиная с Windows 95, компания Microsoft Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах FAT32 - Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΠΈΠ΄Π²ΡƒΡ…Ρ€Π°Π·Ρ€ΡΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ FAT. ВСхничСский прогрСсс Π½Π΅ стоит Π½Π° мСстС ΠΈ возмоТностСй FAT стало явно нСдостаточно. FAT32 стала ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ дискам, Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… объСмов (объСм диска Π΄ΠΎ 2 Π’Π±Π°ΠΉΡ‚). +Из-Π·Π° использования Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… кластСров, Π²Ρ‹Π³ΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с FAT16 составляСт порядка 10\%. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ FAT32 обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΠ±ΡƒΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ это двумя сущСствСнными нововвСдСниями: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ пСрСмСщСния ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ FAT (Ссли основная копия ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° поврСТдСния); Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ хранСния Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ систСмных Π΄Π°Π½Π½Ρ‹Ρ…. \\ \hline + +Ѐайловая систСма NTFS β€” ΠΎΡ‚ Π°Π½Π³Π». New Technology File System, файловая систСма Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +\begin{itemize} +\item ΠΏΡ€Π°Π²Π° доступа +\item Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… +\item ДисковыС ΠΊΠ²ΠΎΡ‚Ρ‹ +\item Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² +\item Π–ΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +\end{itemize} +& Ни ΠΎΠ΄Π½Π° ΠΈΠ· вСрсий FAT Π½Π΅ обСспСчиваСт Ρ…ΠΎΡ‚ΡŒ сколько-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ уровня бСзопасности. Π­Ρ‚ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… (сТатия, ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ) ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ нСобходимости создания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. И Сю стала файловая систСма NTFS. Π’ Π½Π΅ΠΉ для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΏΡ€Π°Π²Π° доступа (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π½Π° запись ΠΈ Ρ‚.Π΄.). Благодаря этому сущСствСнно ΠΏΠΎΠ²Ρ‹ΡΠΈΠ»Π°ΡΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, NTFS обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ…. + +Начиная с Windows 2000, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия NTFS 5.0, которая, ΠΏΠΎΠΌΠΈΠΌΠΎ стандартных, позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°. Π‘Ρ‚Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ) Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° дискС. Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТится большоС количСство ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пустых Π±Π°ΠΉΡ‚ΠΎΠ². Ѐайловая систСма NTFS позволяСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. +ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ Ρ‚ΠΎΠΌΠ°ΠΌ. + +ΠŸΡ€ΠΈ этом, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ссли для Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ NTFS Π±Ρ‹Π»ΠΈ установлСны ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²Π° доступа, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ Π΅Π³ΠΎ скопировали Π½Π° Ρ€Π°Π·Π΄Π΅Π» FAT, Ρ‚ΠΎ всС Π΅Π³ΠΎ ΠΏΡ€Π°Π²Π° доступа ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, присущиС NTFS, Π±ΡƒΠ΄ΡƒΡ‚ утСряны. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π±Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. \\ \hline + +05-fat & ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° NTFS ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ практичСски всСго: ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, надСТности ΠΈ эффСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ) Π½Π° дискС. Π’Π°ΠΊ, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных Ρ†Π΅Π»Π΅ΠΉ создания NTFS Π±Ρ‹Π»ΠΎ обСспСчСниС скоростного выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, запись), Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставлСниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй: сТатиС Π΄Π°Π½Π½Ρ‹Ρ…, восстановлСниС ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² систСмы Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… дисках ΠΈ Ρ‚.Π΄. Π”Ρ€ΡƒΠ³ΠΎΠΉ основной Ρ†Π΅Π»ΡŒΡŽ создания NTFS Π±Ρ‹Π»Π° рСализация ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ бСзопасности, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы FAT, FAT32 Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ годились. Π’ NTFS ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠ΅ (Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа). + +Ѐайловая систСма FAT для соврСмСнных ТСстких дисков просто Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ (Π²Π²ΠΈΠ΄Ρƒ Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… возмоТностСй). Π§Ρ‚ΠΎ касаСтся FAT32, Ρ‚ΠΎ Π΅Π΅ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΡƒΠΆΠ΅ с натяТкой. Если ΠΊΡƒΠΏΠΈΡ‚ΡŒ ТСсткий диск Π½Π° 1000 Π“Π‘, Ρ‚ΠΎ Π²Π°ΠΌ придСтся Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². А Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΌΠΎΠ½Ρ‚Π°ΠΆΠΎΠΌ, Ρ‚ΠΎ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² 4 Π“Π± ΠΊΠ°ΠΊ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°. ВсСх пСрСчислСнных нСдостатков лишСна файловая систСма NTFS. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ вдаваясь Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ возмоТности Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы NTFS, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Π² Π΅Π΅ ΠΏΠΎΠ»ΡŒΠ·Ρƒ. ПослСдниС вСрсии ОБ Windows Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π€Π‘, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ использования Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… устройств. \\ \hline + +Вопросы для самопровСрки & ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ вопрос: Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ файловая систСма? (способ разбиСния диска Π½Π° сСгмСнты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ОБ? (Π΄Π°, Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ диск Π±Ρ‹Π» ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½) \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° Ѐайловая систСма ΠΈ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ… & Π”ΠΎ появлСния Java 7 всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса File. НСмного Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π΅Π³ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ посмотрим, Π½Π° Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ. \\ \hline + +Π»Π°ΠΉΠ²ΠΊΠΎΠ΄ 05-Класс-File & Π’ Java Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс (File), с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π° дискС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ содСрТимым Ρ„Π°ΠΉΠ»ΠΎΠ², Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы: FileInputStream, FileOutputStream ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим ΠΏΠΎΠ·ΠΆΠ΅. Под словами ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ я ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… свойства ΠΈ Π΅Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²ΠΎ всС классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с содСрТимым Ρ„Π°ΠΉΠ»Π° (Ρ‡ΠΈΡ‚Π°ΡŽΡ‚, ΠΏΠΈΡˆΡƒΡ‚, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса File. + +File file = new File("file.txt"); + +Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠ΅ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ конструктора Π·Π°Π΄Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Ρ‚Π°ΠΌ, Π³Π΄Π΅ исполняСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. \\ \hline + +05-Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ & прСдставим, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ вывСсти Π½Π° экран список всСх Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. + +File folder = new File("."); +for (File file : folder.listFiles()) + System.out.println(file.getName()); + +Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран всё содСрТимоС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΎ Ρ‡Ρ‘ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Ρ‚ΠΎΡ‡ΠΊΠ° Π² строкС с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°. Если просто ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ использован Ρ„Π°ΠΉΠ» Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, Ρ‡Ρ‚ΠΎ исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° Ссли ΡƒΠΊΠ°Π·Π°Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС нСпосрСдствСнно Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ. ΠΌΠ΅Ρ‚ΠΎΠ΄ listFiles() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ. А ΠΌΠ΅Ρ‚ΠΎΠ΄ getName() Π²Ρ‹Π΄Π°Ρ‘Ρ‚ имя Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ. \\ \hline + +05-манипуляции-Ρ…-2 & Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ дирСкториями, ΠΊΡ€ΠΎΠΌΠ΅ рассмотрСнных Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ слайдС. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ. Π”Π°Π»Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΈ Π΅Π³ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Ρ€Π°Π½Π΅Π΅ ΠΌΡ‹ пользовались ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ), порядковый Π½ΠΎΠΌΠ΅Ρ€ Тёсткого диска, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располоТСн Ρ„Π°ΠΉΠ». ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ (ΠΌΠ΅Ρ‚ΠΎΠ΄, кстати, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину ΠΈΠ»ΠΈ лоТь, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π»ΠΈ дСйствиС), Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ». Ну ΠΈ Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько Π΅Ρ‰Ρ‘ свободного мСста доступно Π½Π° дискС, Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ находимся. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° слайдС. Могло ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ класс прСдоставляСт достаточноС количСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, Π½ΠΎ это Π½Π΅ совсСм Ρ‚Π°ΠΊ, сСйчас ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ. Π’Π°ΠΊΠΆΠ΅ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ фактичСски Ρƒ класса File ΠΏΠΎΡ‡Ρ‚ΠΈ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹: ΠΎΠ΄Π½Π° вСрсия Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ String, вторая File\\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° ΠšΠ»Π°ΡΡΡ‹ Paths, Path, Files, FileSystem Π² Java 7 ΠΈ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ & Π’ Java 7 создатСли языка Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ \\ \hline + +05-файловая-систСма & Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ класса File Π±Ρ‹Π» ряд нСдостатков. НапримСр, Π² Π½Π΅ΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° copy(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ (казалось Π±Ρ‹, довольно часто нСобходимая функция). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² классС File Π±Ρ‹Π»ΠΎ достаточно ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈ boolean-значСния. ΠŸΡ€ΠΈ ошибкС Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false, Π° Π½Π΅ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ диагностику ошибок ΠΈ установлСниС ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ достаточно нСпростым Π΄Π΅Π»ΠΎΠΌ. ВмСсто Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ класса File появились Ρ†Π΅Π»Ρ‹Ρ… 3 класса: Paths, Path ΠΈ Files. Если совсСм-совсСм Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‚ΠΎ Path β€” это интСрфСйс, Π° Π½Π΅ класс, Π° интСрфСйсы ΠΌΡ‹ рассмотрим Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ появился класс FileSystem, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт интСрфСйс ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Ѐайловая систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° для создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Path, PathMatcher, Files). Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. НапримСр, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈ Π½Π° этом ΠΏΠΎΠΊΠ° остановимся. \\ \hline + +URI - Uniform Resource Identifier (ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ рСсурса) + +URL - Uniform Resource Locator (ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ мСстонахоТдСния рСсурса) + +URN - Unifrorm Resource Name (ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя рСсурса) + +05-ΠΏΡƒΡ‚ΡŒ & РазбСрСмся с ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΠΈΡΡ классами ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…. НачнСм с ΠΊΠ°ΠΊ всСгда ΠΎΡ‚ простого ΠΊ слоТному. Paths β€” это совсСм простой класс с СдинствСнным статичСским ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ get(). Π•Π³ΠΎ создали ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ URI ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Path. Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π· ΠΈ навсСгда Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ понятия URI, URL, URN, Π°ΠΉ - это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π› - это Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ мСстонахоТдСниС, Н - это имя рСсурса. \\ \hline + +05-Π½Π΅Ρ‚-Ρ„Π°ΠΉΠ»Π° & говоря ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… ΠΎΡ‡Π΅Π½ΡŒ сильно хочСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСбольшоС отступлСниС ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° FileNotFoundException. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² случаях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° этапС компиляции: Π€Π°ΠΉΠ» ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ Π½Π΅ сущСствуСт ΠΈΠ»ΠΈ сущСствуСт, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ нСдоступСн (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π° запись Π² Ρ„Π°ΠΉΠ» со свойством Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ). Как Π²ΠΈΠ΄Π½ΠΎ Π½Π° структурС, прСкрасно Π²ΠΈΠ΄Π½ΠΎ всю Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ наслСдования. НСпосрСдствСнно FileNotFoundException наслСдуСтся ΠΎΡ‚ IOException, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сигнализируСт ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. \\ \hline + +05-дСйствия-с-путями & ВСрнёмся ΠΊ ΠΊΠΎΠ΄Ρƒ, ΠΈ, Ρ€Π°Π· ΡƒΠΆ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Path, разбСрёмся, Ρ‡Ρ‚ΠΎ это Π·Π° Path Ρ‚Π°ΠΊΠΎΠΉ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½. По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счСту β€” это ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ класса File. Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ с File. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΈΠ· Π½Π΅Π³ΠΎ ΡƒΠ±Ρ€Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π² Path Π±Ρ‹Π»ΠΈ упорядочСны Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ классС File ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈ Ρ‚ΠΎ String, Ρ‚ΠΎ boolean, Ρ‚ΠΎ File β€” Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π±Ρ‹Π»ΠΎ нСпросто. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄ getParent(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΡƒΡ‚ΡŒ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π²ΠΈΠ΄Π΅ строки. Но ΠΏΡ€ΠΈ этом Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getParentFile(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° File. Π­Ρ‚ΠΎ явно ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Path ΠΌΠ΅Ρ‚ΠΎΠ΄ getParent() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ просто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Path. Никакой ΠΊΡƒΡ‡ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² β€” всС Π»Π΅Π³ΠΊΠΎ ΠΈ просто. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого класса ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ родитСля, Ρ‚Π°ΠΊ ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΡƒΡ‚ΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ начинаСтся Π»ΠΈ наш ΠΏΡƒΡ‚ΡŒ с Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΈ Π½Π΅ заканчиваСтся Π»ΠΈ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ endsWith(). Он провСряСт, заканчиваСтся Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. ИмСнно Π½Π° ΠΏΡƒΡ‚ΡŒ, Π° Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ€ символов. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ startsWith ΠΈ endsWith() Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡƒΡ‚ΡŒ, Π° Π½Π΅ просто Π½Π°Π±ΠΎΡ€ символов: Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ всСгда Π±ΡƒΠ΄Π΅Ρ‚ false, Π΄Π°ΠΆΠ΅ Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ заканчиваСтся Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ символов\\ \hline + +05-очистка-ΠΏΡƒΡ‚Π΅ΠΉ & ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Path Π΅ΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², которая ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ путями. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΡΡ‚ΡŒ Π² скриптовом Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ истину, Π° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΏΠΎΠ»Π½Π΅. ΠœΠ΅Ρ‚ΠΎΠ΄ normalize() - Β«Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Β» Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, удаляя ΠΈΠ· Π½Π΅Π³ΠΎ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ элСмСнты. Π’Ρ‹, ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² популярных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΏΡ€ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΡƒΡ‚Π΅ΠΉ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ символы β€œ.” (для обозначСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ дирСктории”) ΠΈ β€œ..” (для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ). Π’Π°ΠΊ Π²ΠΎΡ‚, Ссли Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ появился ΠΏΡƒΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ β€œ.” ΠΈΠ»ΠΈ β€œ..”, ΠΌΠ΅Ρ‚ΠΎΠ΄ normalize() ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ. Π£ Path довольно ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈΡ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΡƒΠΆΠ΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. \\ \hline + +05-манипуляции-Ρ„Π°ΠΉΠ» & Π° ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ класса Files. Files β€” это ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π½Ρ‹ΠΉ класс, ΠΊΡƒΠ΄Π° Π±Ρ‹Π»ΠΈ вынСсСны статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ· класса File. Он сосрСдоточСн Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ дирСкториями. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Files, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Для этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ createFile() для Ρ„Π°ΠΉΠ»ΠΎΠ², для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ β€” createDirectory(), copy(), move() ΠΈ delete(). для Π½Π°Ρ‡Π°Π»Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ createFile() Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ pics создали Ρ„Π°ΠΉΠ».Ρ‚Ρ…Ρ‚ для экспСримСнтов, Π΄Π°Π»Π΅Π΅ ΠΏΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ создаём Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ createDirectory(). ПослС этого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ move() ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ pics Π² эту Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, (здСсь ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ REPLACE\_EXISTING, - Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ссли ΠΎΠ½ сущСствуСт), Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· тСстовой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Java ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ copy() (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ссли Π½ΡƒΠΆΠ½ΠΎ), Π° Π² ΠΊΠΎΠ½Ρ†Π΅ β€” удаляСтся Ρ„Π°ΠΉΠ» ΠΈ тСстовая дирСктория ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ delete().\\ \hline + +05-Ρ€Π°Π±ΠΎΡ‚Π°-с-содСрТимым & класс Files позволяСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ самими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π½ΠΎ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΅Π³ΠΎ содСрТимым. Для записи Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ» Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ write(), Π° для чтСния β€” Ρ†Π΅Π»Ρ‹Ρ… 3: read(), readAllBytes() ΠΈ readAllLines() ΠœΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ остановимся Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ записи ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ чтСния всСх строк. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Ρ‘ΠΌ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ интСрСсный Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния β€” List. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΌ список строк Ρ„Π°ΠΉΠ»Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с содСрТимым ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ, вСдь вСсь Ρ„Π°ΠΉΠ», строку Π·Π° строкой, ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вывСсти Π² консоль Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ for. ΠšΡΡ‚Π°Ρ‚ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ прСдставляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ vim. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΈΠΊ cat.txt ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ многострочноС описаниС, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠŸΡ€ΠΈ этом, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ссли Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ сущСствуСт, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ получится, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° FileAlreadyExists, поэтому Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ послС всСх Π½Π°ΡˆΠΈΡ… манипуляций Ρ„Π°ΠΉΠ» ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. \\ \hline + +Вопросы для самопровСрки & КакоС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выбрасываСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ссли Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»? (filenotfoundexception). Бсылка Π½Π° мСстонахоТдСниС - это: URI, URL, URN. \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° java.io & ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ использования ΠΏΠ°ΠΊΠ΅Ρ‚Π° ИО вряд Π»ΠΈ получится, поэтому Π½Π°Ρ‡Π½Ρ‘ΠΌ с ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ, Π½Ρƒ ΠΈ Π΅Ρ‰Ρ‘ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ появился Ρ€Π°Π½ΡŒΡˆΠ΅. \\ \hline + +05-Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄-Π±Π΅Π·-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² & ΠŸΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ обмСниваСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ со внСшним ΠΌΠΈΡ€ΠΎΠΌ. Π­Ρ‚ΠΎ, бСзусловно, Π΄Π΅Π»Π°ΡŽΡ‚ Π»ΡŽΠ±Ρ‹Π΅ сСтСвыС прилоТСния – ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… устройств, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ сСти. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ устройствами Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ„Π°ΠΉΠ», ΠΈΠ»ΠΈ ΠΆΠ΅, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ - ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° экран. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, устройства, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ считываниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ самыми Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ – Ρ„Π°ΠΉΠ», ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, входящСС сСтСвоС соСдинСниС ΠΈ Ρ‚.Π΄. Π’ΠΎ ΠΆΠ΅ касаСтся ΠΈ устройств Π²Ρ‹Π²ΠΎΠ΄Π° – это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ», экран ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, исходящСС сСтСвоС соСдинСниС ΠΈ Ρ‚.ΠΏ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, всС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ систСмС Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ устройств Π²Π²ΠΎΠ΄Π° ΠΊ устройствам Π²Ρ‹Π²ΠΎΠ΄Π°. \\ \hline + +05-абстрактный-Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ & РСализация систСмы Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ослоТняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌ спСктром источников ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π•ΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии, символьном ΠΈΠ»ΠΈ тСкстовом, с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ (ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для русского языка ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ 4 Ρ‚ΠΈΠΏΠΎΠ²), ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ числа Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прСдставлСниях. Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ примСняСтся буфСризация. Π’ Java для описания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ Π²Π²ΠΎΠ΄Ρƒ/Π²Ρ‹Π²ΠΎΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ понятиС ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… (stream). ΠŸΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… это абстракция, физичСски, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‚. ΠŸΠΎΡ‚ΠΎΠΊ связан с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ источником, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ, Π΄Π°Π½Π½Ρ‹Ρ…, способным ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. БоотвСтствСнно, ΠΏΠΎΡ‚ΠΎΠΊΠΈ дСлятся Π½Π° входящиС – Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ выходящиС – ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠ΅ (Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅) Π΄Π°Π½Π½Ρ‹Π΅. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ stream позволяСт Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ устройствами ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ‚Π°ΠΊΠΈΠΌΠΈ устройствами Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π² ΡΠ΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ со спСциализированного устройства. Π’ Java ΠΏΠΎΡ‚ΠΎΠΊΠΈ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠžΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ… классы ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.io. Они довольно Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ВсС классы Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π΄Π²Π΅ части – ΠΎΠ΄Π½ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ – Π²Ρ‹Π²ΠΎΠ΄.\\ \hline + +ΠšΠ»Π°ΡΡΡ‹ InputStream ΠΈ OutputStream + +InputStream – это Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ абстрактный класс для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°, Ρ‚.Π΅. чтСния. + +05-1-input & Как ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, всС Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всС классы ΠΏΠ°ΠΊΠ΅Ρ‚Π° ИО ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ InputStream для Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ для Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… – ΠΎΡ‚ OutputStream. +Input Stream описываСт Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со входящими Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Класс довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ опСрация прСдставлСна ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ read() (Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²). Он являСтся абстрактным ΠΈ, соотвСтствСнно, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классах-наслСдниках. Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для считывания Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int. Π’ Ρ‚ΠΎΠΌ случаС, Ссли считываниС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π»Π΅ΠΆΠΈΡ‚ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 255 ΠΈ прСдставляСт собой ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π±Π°ΠΉΡ‚ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ int содСрТит 4 Π±Π°ΠΉΡ‚Π° ΠΈ получаСтся простым Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ нулями Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±Π°ΠΉΡ‚ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°ΠΊΠΎΠΌ ΠΈ Π½Π΅ находится Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ -128 Π΄ΠΎ +127, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ byte Π² Java. Если достигнут ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Π½Π΅ΠΌ большС Π½Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для чтСния, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ -1. Если ΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ удаСтся ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ошибок, ΠΈΠ»ΠΈ сбоСв, Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ java.io.IOException. Π­Ρ‚ΠΎΡ‚ класс наслСдуСтся ΠΎΡ‚ Exception, Ссли Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ Π½Π°ΠΌΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π½ΡƒΡŽ струтуру наслСдования, Ρ‚.Π΅. Π΅Π³ΠΎ всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ явно. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Internet ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ТСсткий диск, ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ сбои нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ написана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. А это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊ Π½ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ потСрял Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Когда Ρ€Π°Π±ΠΎΡ‚Π° с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Π΅Π³ΠΎ слСдуСт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ. Для этого вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ close(). Π­Ρ‚ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ освобоТдСны всС систСмныС рСсурсы, связанныС с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. \\ \hline + +ΠšΠ»Π°ΡΡΡ‹ InputStream ΠΈ OutputStream + +OutputStream – это Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ абстрактный класс для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‚.Π΅. записи. & \\ \hline + +05-1-output & Π’ классС OutputStream Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° write() – ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° int, Π²Ρ‚ΠΎΡ€ΠΎΠΉ – byte[] ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ – byte[], ΠΈ Π΄Π²Π° int-числа. ВсС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚. Для записи Π² ΠΏΠΎΡ‚ΠΎΠΊ сразу Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ количСства Π±Π°ΠΉΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ write() пСрСдаСтся массив Π±Π°ΠΉΡ‚. Или, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ массива, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ массив byte[] ΠΈ Π΄Π²Π° числа – отступ ΠΈ количСство Π±Π°ΠΉΡ‚ для записи. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ отступ, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство Π±Π°ΠΉΡ‚ для записи, Π»ΠΈΠ±ΠΎ Ссли сумма отступ плюс Π΄Π»ΠΈΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ большС Π΄Π»ΠΈΠ½Ρ‹ массива, – Π²ΠΎ всСх этих случаях кидаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IndexOutOfBoundsException. РСализация ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ сразу, Π° хранятся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π² памяти. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ записаны Π² ΠΏΠΎΡ‚ΠΎΠΊ, Π° Π½Π΅ хранятся Π² Π±ΡƒΡ„Π΅Ρ€Π΅, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ flush(), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² OutputStream. Когда Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Π΅Π³ΠΎ слСдуСт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ. Для этого вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ close(). Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π·Π°Π½ΠΎΠ²ΠΎ. Π’ классС OutputStream рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close() Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий. +Π˜Ρ‚Π°ΠΊ, классы InputStream ΠΈ OutputStream ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΈ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ абстрактными. Π˜Ρ… Π·Π°Π΄Π°Ρ‡Π° – ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс для классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… источников. Π’Π°ΠΊΠΈΠΌΠΈ источниками ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массив Π±Π°ΠΉΡ‚, Ρ„Π°ΠΉΠ», строка ΠΈ Ρ‚.Π΄. \\ \hline + +ΠšΠ»Π°ΡΡΡ‹ ByteArrayInputStream ΠΈ ByteArrayOutputStream + +03-Π±Π°ΠΉΡ‚-массивы & Π‘Π°ΠΌΡ‹ΠΉ СстСствСнный ΠΈ простой источник, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹, – это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, массив Π±Π°ΠΉΡ‚. Класс ByteArrayInputStream прСдставляСт ΠΏΠΎΡ‚ΠΎΠΊ, ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· массива Π±Π°ΠΉΡ‚. Π­Ρ‚ΠΎΡ‚ класс ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся массив byte[]. БоотвСтствСнно, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² read() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· этого массива. Аналогично, для записи Π±Π°ΠΉΡ‚ Π² массив примСняСтся класс ByteArrayOutputStream. Π­Ρ‚ΠΎΡ‚ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ byte[], ΠΊΡƒΠ΄Π° записываСт Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² write(). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ записанныС Π² массив Π΄Π°Π½Π½Ρ‹Π΅, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ toByteArray(). Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π½Π°Ρ‡Π°Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… элСмСнтов: 1, -1 ΠΈ 0. Π—Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° read() Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΈΠ· массива, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² конструктор ByteArrayInputStream. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ считанноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 255, Π° Π½Π΅ -1, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ read считываСт byte, Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ int, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ числа Π½ΡƒΠ»Π΅ΠΉ (Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии). ΠŸΡ€ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ прСдставлСния ΠΌΡ‹ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π½Π° самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти классы ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ записываСтся Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. НапримСр, ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΈ тСстировании слоТных процСссов записи ΠΈ чтСния ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π­Ρ‚ΠΈ классы Ρ…ΠΎΡ€ΠΎΡˆΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ сразу ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΈ Ρ„Π°ΠΉΠ», Π½ΠΈ сСтСвоС соСдинСниС, Π½ΠΈ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅. \\ \hline + +ΠšΠ»Π°ΡΡΡ‹ FileInputStream ΠΈ FileOutputStream + +03-Ρ„Π°ΠΉΠ»-ΠΏΠΎΡ‚ΠΎΠΊΠΈ & Класс FileInputStream ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ считываниС. ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ строки ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, поэтому Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этого конструктора ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ строку, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ java.io.FileNotFoundException. Если ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создан, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² read() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. +Для записи Π±Π°ΠΉΡ‚ Π² Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс FileOutputStream. ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Π΅Π³ΠΎ конструкторов, ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пСрСзаписан. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Ρ„Π»Π°Π³ добавлСния, Ρ‚ΠΎ всСгда сразу послС создания FileOutputStream Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ создан. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² write() ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ значСния Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² этот Ρ„Π°ΠΉΠ». По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ close(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ систСмС, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ записи Ρ„Π°ΠΉΠ»Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°. +ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с FileInputStream ΠΌΠ΅Ρ‚ΠΎΠ΄ available() практичСски навСрняка Π²Π΅Ρ€Π½Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ число Π±Π°ΠΉΡ‚, сколько Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Но Π½Π΅ стоит Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° это ΠΏΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ устойчиво Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…,– ΠΌΠ΅Ρ‚ΠΎΠ΄ available() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ считано Π±Π΅Π· блокирования. Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ, скорСС всСго, это число ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ„Π°ΠΉΠ»Π°, являСтся всСго лишь частным случаСм Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для наглядности Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ сразу ΠΆΠ΅ послС окончания ΠΈΡ… использования Π² основном Π±Π»ΠΎΠΊΠ΅. Однако Π»ΡƒΡ‡ΡˆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°ΠΉ-с-рСсурсами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ высвобоТдСны всС Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ ΠΈΠΌ рСсурсы. \\ \hline + +Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ классы (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ появлСниС) +\begin{itemize} +\item PipedInputStream ΠΈ PipedOutputStream +\item StringBufferInputStream (deprecated) +\item SequenceInputStream +\item FilterInputStream ΠΈ FilterOutputStream ΠΈ ΠΈΡ… наслСдники +\end{itemize} & +ΠšΠ»Π°ΡΡΡ‹ PipedInputStream ΠΈ PipedOutputStream Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠ°Ρ€Π΅ – ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ PipedInputStream привязываСтся (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ) ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ PipedOutputStream. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Ссли Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ модулями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния). Π‘ΠΎΠ»Π΅Π΅ явно Π²Ρ‹Π³ΠΎΠ΄Π° ΠΎΡ‚ использования PipedI/OStream Π² основном проявляСтся ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. +%% +Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с тСкстовой строкой String ΠΊΠ°ΠΊ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π±Π°ΠΉΡ‚. Для этого ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ классом StringBufferInputStream. ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ конструктору ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ String. Π”Π°Π½Π½Ρ‹Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ read(), Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· этой строки. ΠŸΡ€ΠΈ этом символы Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π±Π°ΠΉΡ‚Ρ‹ с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ точности – ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ отбрасываСтся (напомню, Ρ‡Ρ‚ΠΎ char ΠΈ ΠΊΠ°ΠΊ символ ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… состоит ΠΈΠ· Π΄Π²ΡƒΡ… Π±Π°ΠΉΡ‚). +%% +Класс SequenceInputStream ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π”Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ – сначала всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² спискС, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠΎΠ½Π΅Ρ† ΠΏΠΎΡ‚ΠΎΠΊΠ° SequenceInputStream Π±ΡƒΠ΄Π΅Ρ‚ достигнут Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΡ‚ΠΎΠΊΠ°, послСднСго Π² спискС. +%% +Π—Π°Π΄Π°Ρ‡ΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅/Π²Ρ‹Π²ΠΎΠ΄Π΅ вСсьма Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ - это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ считываниС Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· массивов, Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ считываниС строк ΠΈΠ· массивов ΠΈ Ρ‚.Π΄. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с использованиСм простого наслСдования ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ возникновСнию слишком большого числа подклассов. Π‘ΠΎΠ»Π΅Π΅ эффСктивно ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ надстроСк (Π² ООП этот шаблон называСтся Π°Π΄Π°ΠΏΡ‚Π΅Ρ€) Надстройки – Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для получСния Π½ΠΎΠ²Ρ‹Ρ… свойств ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² – Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² ΠΊ классам Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ java.io ΠΈΡ… Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ. ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² \\ \hline + +Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ классы (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)(ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ появлСниС) +\begin{itemize} +\item LineNumberInputStream, LineNumberReader +\item PushBackInputStream +\item PrintStream, PrintWriter +\end{itemize} & +Класс LineNumberInputStream Π²ΠΎ врСмя чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ подсчСт, сколько строк Π±Ρ‹Π»ΠΎ считано ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°. НомСр строки, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ происходит Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getLineNumber(). Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setLineNumber(int lineNumber). Π­Ρ‚ΠΎΡ‚ класс практичСски Ρ€Π°Π·Ρƒ объявили ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ вмСсто Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ LineNumberReader с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ. +%% +Π­Ρ‚ΠΎΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ позволяСт Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ считанныС ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅. Π’Π°ΠΊΠΎΠ΅ дСйствиС производится Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° unread(). ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ обСспСчиваСтся подобная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт наличия Π² классС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° – массива Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡΡ‡ΠΈΡ‚Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. +%% +PrintStream ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ записи строк Π² Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Π’ Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ print(), ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Java, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏ Object. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сначала ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² строку, послС Ρ‡Π΅Π³ΠΎ записаны Π² ΠΏΠΎΡ‚ΠΎΠΊ. Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ обрабатываСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° print ΠΈ дальшС Π½Π΅ бросаСтся (ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Π»ΠΈ ошибка, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° checkError()). Π”Π°Π½Π½Ρ‹ΠΉ класс Ρ‚Π°ΠΊΠΆΠ΅ считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ, ΠΈ вмСсто Π½Π΅Π³ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PrintWriter, ΠΎΠ΄Π½Π°ΠΊΠΎ старый класс ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ статичСскиС поля out ΠΈ err класса System ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ это Ρ‚ΠΈΠΏ. \\ \hline + +BufferedInputStream ΠΈ BufferedOutputStream 05-сравнСниС-1 & ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ BufferedInputStream ΠΈ BufferedOutputStream. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€ΠΈ считывании с Π²Π½Π΅ΡˆΠ½ΠΈΡ… устройств Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. BufferedInputStream содСрТит массив Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слуТит Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ для считываСмых Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ skip()), сначала заполняСтся Π±ΡƒΡ„Π΅Ρ€Π½Ρ‹ΠΉ массив, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° загруТаСтся сразу ΠΌΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ read ΠΈΠ»ΠΈ skip. BufferedOutputStream прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΡƒΡŽ запись Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· обращСния ΠΊ устройству Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ записи ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€. НСпосрСдствСнноС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ устройству Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ, соотвСтствСнно, запись Π² Π½Π΅Π³ΠΎ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΡ„Π΅Ρ€ заполнится. Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ содСрТимого Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° устройство Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ flush(). Для наглядности Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ нСбольшой Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² символов, Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ. \\ \hline + +05-сравнСниС-2 & На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС просто ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ эти символы ΠΈΠ· Ρ„Π°ΠΉΠ»Π° простым ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π²Π²ΠΎΠ΄Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это заняло сколько-Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ \\ \hline + +05-сравнСниС-3 & ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ справляСтся Ρ€ΠΎΠ²Π½ΠΎ с Ρ‚ΠΎΠΉ-ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π½Π° ΠΏΠ°Ρ€Ρƒ порядков быстрСС. Π’Ρ‹Π³ΠΎΠ΄Π° использования Π½Π°Π»ΠΈΡ†ΠΎ.\\ \hline + +УслоТнСниС Π΄Π°Π½Π½Ρ‹Ρ… DataInputStream ΠΈ DataOutputStream 05-Π΄Π°Π½Π½Ρ‹Π΅-1 & Π”ΠΎ сих ΠΏΠΎΡ€ Ρ€Π΅Ρ‡ΡŒ шла Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ считывании ΠΈ записи Π² ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ byte. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Java ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ интСрфСйсы DataInput ΠΈ DataOutput ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – классы-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ DataInputStream ΠΈ DataOutputStream. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ DataInput ΠΈ DataOutput ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Π° классы DataInputStream ΠΈ DataOutputStream, соотвСтствСнно, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ считывания ΠΈ записи Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ всСх ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈ этом происходит конвСртация этих Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π°Π±ΠΎΡ€ byte ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π§Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π»ΠΈΡΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠ², Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ запись. Если Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int ΠΈ long, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ short, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций, Π½ΠΎ числа Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ совсСм Π΄Ρ€ΡƒΠ³ΠΈΠ΅. БобствСнно, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π½Π°ΠΌ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. \\ \hline + +05-Π΄Π°Π½Π½Ρ‹Π΅-2 & Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ записали, Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС значСния ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ \\ \hline + +05-Π΄Π°Π½Π½Ρ‹Π΅-3 & А Π·Π°Ρ‚Π΅ΠΌ занимаСмся нашим Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ - всё Π»ΠΎΠΌΠ°Π΅ΠΌ ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всё ΠΏΠΎΡΠ»ΡƒΡˆΠ½ΠΎ сломалось. А Π·Π°Ρ‡Π΅ΠΌ ΠΌΡ‹ это Π»ΠΎΠΌΠ°Π΅ΠΌ? ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ сСйчас ΠΈ Π½Π΅ Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅. \\ \hline + +Π•Ρ‰Ρ‘ слоТнСС ObjectInputStream ΠΈ ObjectOutputStream & Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² процСсс прСобразования Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ нСсколько слоТнСС – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ структуру, хранят ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Ρ‚.Π΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ такая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ - сСриализация (serialization), ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ дСйствиС, – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ воссозданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ – дСсСриализация. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΌΡ‹ ΠΈΡ… Π±ΡƒΠ΄Π΅ΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° разбСрёмся с интСрфСйсами ΠΈ всякими внСшними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Π½ΠΎ Π½Π΅ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΈΡ… Π² нашСм сСгодняшнСм контСкстС Π±Ρ‹Π»ΠΎ нСльзя. \\ \hline + +ΠšΠ»Π°ΡΡΡ‹ Reader ΠΈ Writer + +05-Π±Π°ΠΉΡ‚Ρ‹-символы + +ΠšΠ»Π°ΡΡΡ‹-мосты InputStreamReader ΠΈ OutputStreamWriter & РассмотрСнныС классы – наслСдники InputStream ΠΈ OutputStream – Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Если с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ тСкст, Ρ‚ΠΎ сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ символу Π΅Π³ΠΎ числовой ΠΊΠΎΠ΄. Π’Π°ΠΊΠΎΠ΅ соотвСтствиС называСтся ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Π’Π°ΠΊ Π²ΠΎΡ‚, Π΄ΠΆΠ°Π²Π° прСдоставляСт классы, практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ читатСлями ΠΈ писатСлями, соотвСтствСнно. Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ классами вСсьма Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. FileInputStream - FileReader, FileOutputStream - FileWriter, BufferedInputStream - BufferedReader, PrintStream - PrintWriter ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠ»Π°ΡΡΡ‹-мосты InputStreamReader ΠΈ OutputStreamWriter ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ символов Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π² конструктор Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Если ΠΎΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· извСстных ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.\\ \hline + +Вопросы для самопровСрки & Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ случайного Π±Π°ΠΉΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° BufferedInputStream? (Π΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ случайного Π±Π°ΠΉΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BufferedInputStream? (Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ всСгда Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π½Π°Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚Π°ΠΌ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ) \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° java.nio ΠΈ nio2 & ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java IO являСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Π° Java NIO – Π±ΡƒΡ„Π΅Ρ€-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ \\ \hline + +io vs nio + +05-ΠΏΠΎΡ‚ΠΎΠΊΠΈ-ΠΈ-Π±ΡƒΡ„Π΅Ρ€Ρ‹ & ΠŸΠΎΡ‚ΠΎΠΊΠΎΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°ΠΉΡ‚ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ. Данная информация Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ произвСсти ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ манипуляции, Π²Π°ΠΌ придСтся сначала ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€Π΅. +ΠŸΠΎΠ΄Ρ…ΠΎΠ΄, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ основан Java NIO Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся. Π”Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π±ΡƒΡ„Π΅Ρ€ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π±ΡƒΡ„Π΅Ρ€Ρƒ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Π½Π°Π·Π°Π΄. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС гибкости ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ содСрТит Π»ΠΈ Π±ΡƒΡ„Π΅Ρ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ объСм Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±ΡƒΡ„Π΅Ρ€ Π²Ρ‹ Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, находящиСся Π² Π±ΡƒΡ„Π΅Ρ€Π΅. \\ \hline + +05-ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅-чтСния & ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° (streams) Π² Java IO ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ выполнСния вызываСтся read() ΠΈΠ»ΠΈ write() ΠΌΠ΅Ρ‚ΠΎΠ΄ любого класса ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.io.*, происходит Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ считаны ΠΈΠ»ΠΈ записаны. ΠŸΠΎΡ‚ΠΎΠΊ выполнСния Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. +ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Java NIO позволяСт Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ считанныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° (channel) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ доступно Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ссли доступных Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ станут доступными для считывания, ΠΏΠΎΡ‚ΠΎΠΊ выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. \\ \hline + +05-ΠΊΠ°Π½Π°Π»Ρ‹ & ΠšΠ°Π½Π°Π»Ρ‹ – это логичСскиС ΠΏΠΎΡ€Ρ‚Π°Π»Ρ‹, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ осущСствляСтся Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π±ΡƒΡ„Π΅Ρ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ источниками ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠ°ΠΌΠΈ этих ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°, Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π±ΡƒΡ„Π΅Ρ€, Π° ΠΎΠ½ пСрСдаСтся Π² ΠΊΠ°Π½Π°Π». ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² прСдоставлСнный Π²Π°ΠΌΠΈ Π±ΡƒΡ„Π΅Ρ€. +Π’Π°ΠΊΠΆΠ΅, Π² Java NIO появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ°Π½Π°Π» Π³ΠΎΡ‚ΠΎΠ² для записи ΠΈ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». Π”Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π±ΡƒΡ„Π΅Ρ€ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π±ΡƒΡ„Π΅Ρ€Ρƒ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС гибкости ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, содСрТит Π»ΠΈ Π±ΡƒΡ„Π΅Ρ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ объСм Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±ΡƒΡ„Π΅Ρ€ Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠ»ΠΈΡΡŒ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, находящиСся Ρ‚Π°ΠΌ. \\ \hline + +05-ΠΊΠ°Π½Π°Π»-Π±ΡƒΡ„Π΅Ρ€ & ВзглянСм Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ ΠΊΠ°Π½Π°Π»Π°. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ² всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€, сохранив число ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… Π±Π°ΠΉΡ‚, Π° Π·Π°Ρ‚Π΅ΠΌ посимвольно ΠΈΡ… Π²Ρ‹Π²Π΅Π»ΠΈ Π² консоль. Для чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getChannel() для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСльзя Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. ΠšΡ€ΠΎΠΌΠ΅ FileChannel Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. ΠŸΡ€ΠΈ этом, FileChannel нСльзя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ. \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° String & Класс String ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС строк, состоящих ΠΈΠ· символов. \\ \hline + +private final char value[]; + +private final byte[] value; + +\begin{itemize} +\item immutable +\item final +\end{itemize} & Ссли Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Π΅Π΅, заглянув Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ посмотрСв способ ΠΈΡ… хранСния, Ρ‚ΠΎ строки (Π΄ΠΎ Java 9) ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой массив символов, Π° начиная с Java 9 строки хранятся ΠΊΠ°ΠΊ массив Π±Π°ΠΉΡ‚. Как я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Ρ€Π°Π½Π΅Π΅, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΆΠ°Π²Π°8. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, Π³Π΄Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ строки прСдставлСны ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ символов, Π² Java ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса String. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° String получаСтся нСизмСняСмая символьная строка, Ρ‚.Π΅. Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ символы ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ строки. ΠŸΡ€ΠΈ любом ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ строки создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° String, содСрТащий всС измСнСния. А Π·Π½Π°Ρ‡ΠΈΡ‚ Ρƒ String Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ особСнности: это immutable (Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΉ) класс; это final класс (Ρƒ класса String Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ наслСдников). \\ \hline + +ЭкзСмпляр класса String + +05-конструкторы-строки + +ASCII - American standard code for information interchange & ЭкзСмпляр класса String ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ мноТСством способов. НСсмотря Π½Π° ΠΊΠ°ΠΆΡƒΡ‰ΡƒΡŽΡΡ простоту ΠΈ Ссли ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΎΠ±Ρ‰Π΅ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΠΌΠΎΡΡ‚ΡŒ, класс строки - это довольно слоТная структура Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ гигантский Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΠ΄Π½ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ конструкторов, Π²ΠΎΠ½, большС 6 ΡˆΡ‚ΡƒΠΊ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ прСдставлСна лишь Ρ‡Π°ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π‘Π°ΠΌΡ‹ΠΌ простым способом являСтся созданиС строки ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с s1. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ строки трСбуСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями. Для этого прСдоставлСны Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ конструкторы. ΠŸΡ€ΠΈ использовании Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° s2 Π² памяти создаСтся Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр строки с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ β€œHome”. Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ массив ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк, Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ строку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся ссылка Π½Π° массив char[]. Если Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° String, содСрТащий Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° String, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ s4. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ s5 ΠΈ s6 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Β«ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΒ» строку ΠΈΠ· Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ массива Π±Π΅Π· указания ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ с Π½Π΅ΠΉ. Если ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°, Π±ΡƒΠ΄Π΅Ρ‚ использована ASCII.\\ \hline + +05-конкатСнация & C ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, которая записываСтся, ΠΊΠ°ΠΊ Π·Π½Π°ΠΊ +, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π΄Π²Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ строки, пороТдая Π² ΠΈΡ‚ΠΎΠ³Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° String. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ сцСплСния ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, строки ΠΌΠΎΠΆΠ½ΠΎ ΡΡ†Π΅ΠΏΠ»ΡΡ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами(int). Π’Π°ΠΊ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int автоматичСски прСобразуСтся Π² своё строковоС прСдставлСниС Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Ρ‚ΠΈΠΏΠ° String. ПослС этого ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ строки ΡΡ†Π΅ΠΏΠ»ΡΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅. \\ \hline + +05-ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°-ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ & БцСпляя Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… с ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ строками, слСдуСт Π±Ρ‹Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π’Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° слоТСния. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТСния Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ сначала Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ слСва, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ справа. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄ΠΎ максимального происходит автоматичСски, Ρ‚Π°ΠΊ Ссли ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ ΠΈ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅, Ссли ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ любоС число ΠΈ строку получится строка. А ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² строку всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ строкой ΠΈ слоТСниС прСвратится Π² ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ. \\ \hline + +Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ строки +\begin{itemize} +\item int length() +\item char charAt(int pos) +\item char[] toCharArray() +\item boolean equals(Object obj) +\item boolean equalsIgnoreCase(Object obj) +\item String concat(String obj) +\item String toLowerCase(), String toUpperCase() +\end{itemize} & На слайдС прСдставлСно нСсколько часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список. Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ строки, Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· строки символа, находящСгося Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ pos, индСксация символов начинаСтся с нуля, ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² массив символов, ПосимвольноС сравнСниС строк, Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ строк Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра, ОбъСдинСниС Π΄Π²ΡƒΡ… строк Π² ΠΎΠ΄Π½Ρƒ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ создаСт Π½ΠΎΠ²Ρ‹ΠΉ строковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ строку, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ добавляСтся содСрТимоС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° строка. ΠœΠ΅Ρ‚ΠΎΠ΄ выполняСт Ρ‚ΠΎ ΠΆΠ΅ дСйствиС, Ρ‡Ρ‚ΠΎ ΠΈ опСрация +. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ всСх символов строки Π² Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр (toLowerCase), Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр (toUpperCase), всС ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, смысла Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚, исходный ΠΊΠΎΠ΄ класса ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‚ΡƒΠ΄Π°.\\ \hline + +!!!строго Π»Π°ΠΉΠ²ΠΊΠΎΠ΄!!! StringBuffer, StringBuilder 05-Π±ΠΈΠ»Π΄Π΅Ρ€ & ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ строка это достаточно Π½Π΅ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π»ΠΈΠ²ΠΎ, ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ прСкрасныС классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠΌΠΈ. Π‘Ρ€Π°Π·Ρƒ ΠΏΠΎΠΉΠ΄Ρ‘ΠΌ ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ объявим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ + +String s = β€œExample”; + +сдСлаСм Ρ†ΠΈΠΊΠ», скаТСм, Π΄ΠΎ 30000, ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ 30 Ρ‚Ρ‹Ρ‰ Ρ€Π°Π·. s = s + i; Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ строку Example012345... просто какая-Ρ‚ΠΎ бСсполСзная ΠΎΡ‡Π΅Π½ΡŒ длинная строчка. Много арифмСтичСских дСйствий, ΠΌΠ½ΠΎΠ³ΠΎ созданий Π½ΠΎΠ²Ρ‹Ρ… строк, Π° старыС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² малСнький Π°Π΄ для Java строк. Π¨ΡƒΡ‡Ρƒ, ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ сборку мусора. Быстро сдСлаСм Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π·Π°ΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. + +long timeStart = System.nanoTime(); +for (int i = 0; i < 30000; ++i) { + s = s + i; +} +double deltaTime = (System.nanoTime() - timeStart) * 0.000000001; +System.out.println("Delta time: " + deltaTime); + +Π–ΠΌΡ‘ΠΌ Run Π–Π΄Ρ‘ΠΌ ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша супСр слоТная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ 0,8. сСкунд. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм побольшС, скаТСм, сто тысяч ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½, просто хочСтся ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ контраст. +%% +Пока ΠΆΠ΄Ρ‘ΠΌ расскаТу Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ самих стрингбилдСрС ΠΈ стрингбуффСрС ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Если Ρƒ вас Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ намСчаСтся какая-Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡ‰Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° со стрингами Π² ΠΊΠ°ΠΊΠΈΡ… Ρ‚ΠΎ гигантских Ρ†ΠΈΠΊΠ»Π°Ρ…, вспомнитС ΠΏΡ€ΠΎ StringBuilder. И ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Если Ρƒ вас Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ β€œΡ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚β€, Ρ‚ΠΎ с 90\% Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ способ это ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ, ΠΈ вСлосипСды ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Если Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ завСсу, Ρ‚ΠΎ всС строковыС классы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с массивами Ρ‡Π°Ρ€ΠΎΠ², Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стринг Π΄Π΅Π»Π°Π΅Ρ‚ это ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎ, выдСляя ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½ΠΎΠ²Ρ‹ΠΉ кусок памяти ΠΏΠΎΠ΄ массив с Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ€Π°Π²Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ строки, Π° Π±ΠΈΠ»Π΄Π΅Ρ€ сразу выдСляСт большой кусок памяти ΠΏΠΎΠ΄ массив, добавляСт ΠΊ Π½Π΅ΠΌΡƒ элСмСнты ΠΏΠΎ индСксу, Π° Ссли массив заканчиваСтся, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π΄Π΅Π»Π°Π΅Ρ‚ массив Π΅Ρ‰Ρ‘ большС, Ρ€Π°Π·Π° Π² Π΄Π²Π°, ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ старый, ΠΈ заполняСт ΡƒΠΆΠ΅ Π΅Π³ΠΎ. Π‘Ρ…ΠΎΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ArrayList, соотвСтствСнно Π‘Π‘Π£Π€Π•Π  Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Π½ΠΎ со связными списками ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ этапС обучСния. Π‘Π‘Π£Π€Π•Π  потокобСзопасСн. потокобСзопасным Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ класс, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сломаСтся. Π’Π°ΠΌ ΠžΠ§Π•ΠΠ¬ интСрСсно ΠΈ ΠΏΡ€ΠΈΠΊΠΎΠ»ΡŒΠ½ΠΎ, происходит рассинхронизация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ начинаСтся самоС ΠΊΡ€ΡƒΡ‚ΠΎΠ΅.\\ \hline +%% + & Π½Ρƒ Π²ΠΎΡ‚, Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ достаточно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎ ощущСниям ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎ. Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Java Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ программистами Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ ΠΈ ΠΏΠΎΡΠ΅Ρ€ΡŒΡ‘Π·Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° 100000 ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ поискС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² элСктронных ΠΊΠ½ΠΈΠ³Π°Ρ…. И ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ StringBuilder ΠΈ StringBuffer. Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ½ΠΈ измСняСмыС строки ΠΈ динамичСскиС ссылки Π½Π° Π½ΠΈΡ…. Π˜Ρ… Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ StringBuilder Π½Π΅ потокобСзопасный, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡ΡƒΡ‚ΡŒ быстрСС, Π° StringBuffer - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… срСдах, Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. ΠœΡ‹ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ StringBuilder. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚ΠΎΠΆΠ΅ самоС, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с использованиСм StringBuilder + +StringBuilder sb = new StringBuilder("Example"); +long timeStart = System.nanoTime(); +for (int i = 0; i < 100\_000; ++i) { sb = sb.append(i); } +double deltaTime = (System.nanoTime() - timeStart) * 0.000000001; +System.out.println("Delta time (sec): " + deltaTime); + +Π’ конструктор ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нашСй строки. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это всё Π΅Ρ‰Ρ‘ стринг, Π½ΠΎ прСдставлСнный Π΄Ρ€ΡƒΠ³ΠΈΠΌ классом, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Ρ‚Π΅ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π½ΡƒΠΆΠ΄ String, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· послСдних Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΆΠ°Π²Ρ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ просто Π²Π·ΡΡ‚ΡŒ ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вывСсти Π² sout Π΅Π³ΠΎ. ΠΈΠ»ΠΈ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ нСявно Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΡ‹ создаём ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ String, Π½ΠΎ Π² Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² классС String. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄ append, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚, ΠΏΠΎ сути, Ρ‚ΠΎΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ s=s+” ”; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ добавляСт Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строки. Ну ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ°Π½Π° Ρ‚Π°ΠΌ Π½Π΅Ρ‚, ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ способом строки. + +Π₯ΠΎΡ‚Π΅Π» ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π–Π΄Ρ‘ΠΌ ВАУ эффСкта, Π½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ Π½Π΅ придётся, Π²ΠΎΡ‚ ΠΎΠ½. Π Π°Π·Π½ΠΈΡ†Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ сравнСния строк, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сами, Ρƒ нас вСрнулся true Π·Π½Π°Ρ‡ΠΈΡ‚ строки ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅. Π’ΠΎΡ‚ ΠΈ всё, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ строках. + +НадСюсь Π²Ρ‹ Π·Π° это врСмя поняли, Ρ‡Ρ‚ΠΎ String Π½Π΅ Ρ‚Π°ΠΊ Ρ‚ΠΎ прост. Π’Π°ΠΊ Π²ΠΎΡ‚ Ρ‚ΠΎΠΆΠ΅ самоС Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ ΠΈ для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… языков программирования, Π²ΠΎΠΎΠ±Ρ‰Π΅ для всСх. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² чистом Π‘ΠΈ Π½Π΅Ρ‚ класса String, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массив ΠΈΠ· Ρ‡Π°Ρ€ фиксированной Π΄Π»ΠΈΠ½Ρ‹, ΠΈ ΠΊΠΎΠΌΡƒ ΠΎΡ…ΠΎΡ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со стрингами ΠΏΠΈΡˆΠ΅Ρ‚ ΠΈΡ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ, думая ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. А для Π±ΠΎΠ»Π΅Π΅ высокоуровнСвых языков - ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ языка ΠΏΠ»ΡΡˆΠ΅Ρ‚ ΠΊΠ°ΠΊ Ρ…ΠΎΡ‡Π΅Ρ‚, поэтому ΠΈ получаСтся мСстами слоТно, часто Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΈ Ρƒ всСх ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ.\\ \hline + +Вопросы для самопровСрки & String - это: -ΠΎΠ±ΡŠΠ΅ΠΊΡ‚; -ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²; -класс. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² языкС Java это: -классы; -массивы; -ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. \\ \hline + +ΠΎΡ‚Π±ΠΈΠ²ΠΊΠ° String pool & Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² бассСйнС? БассСйн ΠΈΠ· строк? БассСйн для строк? Ну Π΄Π°, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого. \\ \hline + +05-ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅-строк & ЭкзСмпляр класса String хранится Π² памяти, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΠΎΠΉ ΠΊΡƒΡ‡Π° (heap), Π½ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹. Если строка, созданная ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструктора хранится нСпосрСдствСнно Π² ΠΊΡƒΡ‡Π΅, Ρ‚ΠΎ строка, созданная ΠΊΠ°ΠΊ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π», ΡƒΠΆΠ΅ хранится Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ мСстС ΠΊΡƒΡ‡ΠΈ β€” Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ ΠΏΡƒΠ»Π΅ строк (string pool). Π’ Π½Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², Π° Π½Π΅ всС строки подряд. ΠŸΡ€ΠΎΡ†Π΅ΡΡ помСщСния строк Π² ΠΏΡƒΠ» называСтся ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΎΡ‚ Π°Π½Π³Π». interning, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅, ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). Когда ΠΌΡ‹ объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° String ΠΈ присваиваСм Π΅ΠΉ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π», Ρ‚ΠΎ JVM обращаСтся Π² ΠΏΡƒΠ» строк ΠΈ ΠΈΡ‰Π΅Ρ‚ Ρ‚Π°ΠΌ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΏΡƒΠ» содСрТит Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ компилятор просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ адрСс строки Π±Π΅Π· выдСлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ новая строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½Π°, Π° ссылка Π½Π° Π½Π΅Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° ΠΈ присвоСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. \\ \hline + +05-ΠΏΡƒΠ»-ΠΈ-конкатСнация & Π’ строкС Β«BestΒ» + Β«CatΒ» ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° строковых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° со значСниями Β«BestΒ» ΠΈ Β«CatΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΡƒΠ». Β«Π‘ΠΊΠ»Π΅Π΅Π½Π½Ρ‹Π΅Β» строки ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ строку со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«BestCatΒ», ссылка Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ бСрСтся ΠΈΠ· ΠΏΡƒΠ»Π° строк (Π° Π½Π΅ создаСтся Π·Π°Π½ΠΎΠ²ΠΎ), Ρ‚.ΠΊ. ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½Π° Π² Π½Π΅Π³ΠΎ Ρ€Π°Π½Π΅Π΅. ЗначСния всСх строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° извСстно Π½Π° этапС компиляции. А Π²ΠΎΡ‚ Ссли ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² строки Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ стрингпул ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получится совсСм новая строка. \\ \hline + +05-ΠΏΡƒΠ»-ΠΈ-конструктор & Когда ΠΌΡ‹ создаСм экзСмпляр класса String с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new, компилятор Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ строки Π² ΠΊΡƒΡ‡Π΅. ΠŸΡ€ΠΈ этом каТдая строка, созданная Ρ‚Π°ΠΊΠΈΠΌ способом, помСщаСтся Π² ΠΊΡƒΡ‡Ρƒ (ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ свою ссылку), Π΄Π°ΠΆΠ΅ Ссли Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² ΠΊΡƒΡ‡Π΅ ΠΈΠ»ΠΈ Π² ΠΏΡƒΠ»Π΅ строк. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, создав Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… строки, Π² памяти Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ это Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ. Π’ Java сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² ΠΏΡƒΠ» ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° intern() Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° String. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ всё Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ: Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ всС строки сразу послС ΠΈΡ… создания Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΏΡƒΠ» строк? Π’Π΅Π΄ΡŒ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ экономии памяти». Π”Π°, срСди достаточно большого количСства программистов Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ присутствуСт. ИмСнно Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ всС ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° процСсс интСрнирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, связанноС с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ ограничСниями памяти, вСдь Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ячСйку памяти ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ бСсконСчным числом процСссов, элСктроника Π΅Ρ‰Ρ‘ Π΄ΠΎ этого Π½Π΅ доросла. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π² Π²ΠΈΠ΄Π΅ примСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° intern()) рСкомСндуСтся Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ВмСсто интСрнирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎ Π½Π΅ΠΉ ΠΌΡ‹ ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ всяких Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ΅ΡΡ‚Π΅Ρ€Ρ‘Π½ΠΎΠΊ. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Π²ΠΎ врСмя сборки мусора Π³Π°Ρ€Π±ΠΈΡ‡ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€ провСряСт ΠΆΠΈΠ²Ρ‹Π΅ (ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ссылки) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΡƒΡ‡Π΅ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ провСсти ΠΈΡ… Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ. Бсылки Π½Π° подходящиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π”Π°Π»Π΅Π΅ происходит ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° String ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅Π΅ ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ. Π’Π°ΠΊΠΆΠ΅ для отслСТивания всСх ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… массивов Π±Π°ΠΉΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ String, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°. ΠŸΡ€ΠΈ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² этой Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ выполняСтся поиск ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… массивов Π±Π°ΠΉΡ‚.\\ \hline + +На этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ & ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах ΠΈ прСдставлСнии Π΄Π°Π½Π½Ρ‹Ρ… Π² Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… устройствах; ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΠΎ посмотрСли Π½Π° популярныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных ссылочных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… String ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ стрингбилдСр ΠΈ стрингпул.\\ \hline + +практичСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅ & Π’ качСствС практичСского задания ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ +\begin{itemize} + \item ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ-Ρ‚Ρ€ΠΎΠΉΠΊΡƒ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ². Для упрощСния (Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ) Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² слСдуСт ΠΏΠΈΡΠ°Ρ‚ΡŒ тСкст Ρ‚ΠΎΠ»ΡŒΠΊΠΎ латинскими Π±ΡƒΠΊΠ²Π°ΠΌΠΈ. + \item Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² (Π½Π΅ особо Π²Π°ΠΆΠ½ΠΎ, Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ»ΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ вовсС ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ); + \item Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска слова Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°. +\end{itemize} \\ \hline + +Π£Ρ‡ΠΈΡ‚Π΅ΡΡŒ Ρ‚Π°ΠΊ, словно Π²Ρ‹ постоянно ΠΎΡ‰ΡƒΡ‰Π°Π΅Ρ‚Π΅ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΡƒ своих Π·Π½Π°Π½ΠΈΠΉ, ΠΈ Ρ‚Π°ΠΊ, словно Π²Ρ‹ постоянно Π±ΠΎΠΈΡ‚Π΅ΡΡŒ Ρ€Π°ΡΡ‚Π΅Ρ€ΡΡ‚ΡŒ свои знания. ΠšΠΎΠ½Ρ„ΡƒΡ†ΠΈΠΉ & НадСюсь, Π½Π° этой Π»Π΅ΠΊΡ†ΠΈΠΈ Π²Ρ‹ Π½Π΅ уснули ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° тСорСтичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ постарался Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС практичСских особСнностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ каТутся СстСствСнными ΠΈ ΠΎ Π½ΠΈΡ… особСнно Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π΅ΡˆΡŒΡΡ. ВсСго Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ ΠΈ Π΄ΠΎ Π½ΠΎΠ²Ρ‹Ρ… встрСч. \\ \hline +\end{longtable} + +\end{document} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Π ΠΠ‘Π‘ΠœΠžΠ’Π Π•Π’Π¬ ΠŸΠžΠ—Π–Π• %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%ВмСсто интСрнирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎ Π½Π΅ΠΉ ΠΌΡ‹ ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя (рассматриваСтся Π΄Π°Π»Π΅Π΅ Π’ ΠšΠΠ§Π•Π‘Π’Π’Π• Π’Π•ΠžΠ Π•Π’Π˜Π§Π•Π‘ΠšΠžΠ“Πž ΠžΠ—ΠΠΠšΠžΠœΠ›Π•ΠΠ˜Π―, ВАК КАК ПОВОКИ И REFLACTION API ЕЩЁ НЕ ПРОΠ₯ΠžΠ”Π˜Π›Π˜). +% НСмного ΠΎ Java 9 +% Π”ΠΎΒ Java 8 строка Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ»Π°ΡΡŒ, ΠΊΠ°ΠΊ массив символов char[]Β Π²Β ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅Β UTF-16, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ·Β ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π½ΠΈΠΌΠ°Π» ΠΏΠΎΒ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° в памяти. +% Π’Β Java 9Β Π±Ρ‹Π»ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ прСдставлСниС для Ρ‚ΠΈΠΏΠ°Β String, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅Β ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ строки (Compact Strings). Благодаря Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ хранСния строк (в зависимости ΠΎΡ‚Β ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°) дСлаСтся Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ массивом символов char[] и массивом Π±Π°ΠΉΡ‚Β byte[]. +% ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΎΠ²Ρ‹ΠΉ способ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° String ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒΒ UTF-16 лишь Π²Β Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° в этом Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, объСм памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ ΠΏΡƒΠ»ΠΎΠΌ строк Π²Β ΠΊΡƒΡ‡Π΅, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π², свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сборщика мусора. +% ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹: + + +% Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² Java ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой константы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ + + +% Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса StringΒ ΠΌΠΎΠΆΠ½ΠΎ двумя способами: ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΈ конструктора + + +% Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» сохраняСтся Π² ΠΏΡƒΠ» строк, Ссли Π΄ΠΎ этого ΠΎΠ½ Ρ‚Π°ΠΌ отсутствовал + + +% Π‘Ρ‚Ρ€ΠΎΠΊΠ°, созданная ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструктора, сохраняСтся Π² heap, Π° Π½Π΅ Π² ΠΏΡƒΠ» строк + + +% Java 6: ΠŸΡƒΠ» строк хранится Π² памяти фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΠΎΠ³ΠΎ PermGen. + + +% Java 7, 8: ΠŸΡƒΠ» строк хранится Π² heap ΠΈ, соотвСтствСнно, для ΠΏΡƒΠ»Π° строк ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΏΠ°ΠΌΡΡ‚ΡŒ прилоТСния + + +% ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Β -XX:StringTableSize=N, Π³Π΄Π΅Β NΒ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€Β HashMap, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π° строк. Π•Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ являСтся фиксированным, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, ΠΊΠ°ΠΊΒ HashMap со списками Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π°Ρ… + + +% Π˜Π½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈΒ JavaΒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Oracle Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ замСдлСнию Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π˜Ρ… рСкомСндация β€” дСдупликация. + + +% ДСдупликация +% Как мы написали в самом Π½Π°Ρ‡Π°Π»Π΅, класс String прСдставляСт собой массив Π±Π°ΠΉΡ‚: + +% private final byte[] value; + + +% А Ρ‚.ΠΊ. созданный экзСмпляр класса String нСльзя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚. Π΅. содСрТимоС массива value[] нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ_,_Β Ρ‚ΠΎΒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзопасно использовано ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколькими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈΒ String. +% ДСдупликация прСдставляСт собой Π½Π΅Β Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ пСрСприсваиваниС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной адрСсов поля value. Π’. Π΅. мы выполняСм Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π΅Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²Β String, а массивов ΠΈΡ…Β Π±Π°ΠΉΡ‚. Поля valueΒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° String с одинаковым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ тСкста ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π°Β Ρ€Π°Π·Π½Ρ‹Π΅ участки памяти (Ρ€Π°Π·Π½Ρ‹Π΅ массивы Π±Π°ΠΉΡ‚), а послС Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π°Β ΠΎΠ΄ΠΈΠ½ ΠΈΒ Ρ‚ΠΎΡ‚Β ΠΆΠ΅ участок памяти, содСрТащий массив Π±Π°ΠΉΡ‚. +% ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, у нас всС Π΅Ρ‰Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π²Β Π²ΠΈΠ΄Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ»Π΅ΠΉ ΠΈΒ Π΄Ρ€. Π’Π°ΠΊΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы зависят ΠΎΡ‚Β ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹/ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΒ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²Β ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚Β 24 Π΄ΠΎΒ 32 Π±Π°ΠΉΡ‚. Однако, для срСднСй Π΄Π»ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β StringΒ Π²Β 45 символов (90 Π±Π°ΠΉΡ‚ + Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ массива), это всС Π΅Ρ‰Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎΒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ в экономии памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ 10%. +% Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ дСдупликация +% Во врСмя сборки мусора GC провСряСт ΠΆΠΈΠ²Ρ‹Π΅ (ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ссылки) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Β ΠΊΡƒΡ‡Π΅ Π½Π°Β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ провСсти ΠΈΡ…Β Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ. Бсылки на подходящиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π”Π°Π»Π΅Π΅ происходит ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β StringΒ ΠΈΠ·Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π°Β Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·Β Π½Π΅Π΅ ссылок Π½Π°Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π°Β ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ. Π’Π°ΠΊΠΆΠ΅ для отслСТивания всСх ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… массивов Π±Π°ΠΉΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈΒ String,Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°. ΠŸΡ€ΠΈ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ в этой Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ выполняСтся поиск ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… массивов Π±Π°ΠΉΡ‚ (символов). +% ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля valueΒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β String пСрСприсваиваСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ на этот ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ массив Π±Π°ΠΉΡ‚. БоотвСтствСнно, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ массив Π±Π°ΠΉΡ‚Β value становится Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ β€” Π½Π°Β Π½Π΅Π³ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ нС ссылаСтся и впослСдствии ΠΎΠ½Β ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ сборку мусора. +% ΠŸΡ€ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, массив Π±Π°ΠΉΡ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉΒ value, вставляСтся Π²Β Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ впослСдствии Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ совмСстно с новым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌΒ StringΒ Π²Β ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Β Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. +% ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, запустив ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ: + +% package ru.gb.jcore; + +% import java.lang.reflect.Field; + +% public class Main { + +% Β  Β  public static void main(String[] args) throws InterruptedException, NoSuchFieldException, IllegalAccessException { + +% Β  Β  Β  Β  char[] chars = {'B', 'e', 's', 't', 'C', 'a', 't'}; +% Β  Β  Β  Β  +% Β  Β  Β  Β  String[] strings = { +% Β  Β  Β  Β  new String(chars), +% Β  Β  Β  Β  new String(chars) +% Β  Β  }; +% Β  Β  +% Β  Β  Β  Β  Field value = String.class.getDeclaredField("value"); +% Β  Β  Β  Β  value.setAccessible(true); + +% Β  Β  Β  Β  System.out.println("Hash of the first object: " + value.get(strings[0])); +% Β  Β  Β  Β  System.out.println("Cache of the second object: " + value.get(strings[1])); + +% Β  Β  Β  Β  System.gc(); +% Β  Β  Β  Β  System.out.println("Started the garbage collector"); + +% Β  Β  Β  Β  Thread.sleep(100); + +% Β  Β  Β  Β  System.out.println("Hash of the first object: " + value.get(strings[0])); +% Β  Β  Β  Β  System.out.println("Cache of the second object: " + value.get(strings[1])); +% Β  Β  } +% } + + +% Π’Ρ‹Π²ΠΎΠ΄: + +% Hash of the first object: [C@726f3b58 +% Cache of the second object: [C@442d9b6e +% Started the garbage collector +% Hash of the first object: [C@726f3b58 +% Cache of the second object: [C@442d9b6e + + +% Как Π²ΠΈΠ΄ΠΈΠΌ, дСдупликация нС сработала. Для СС активации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Β ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒΒ -XX:+UseStringDeduplication, Π°Β Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборщик мусора G1 (Ссли ΠΎΠ½Β Π½Π΅Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΒ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), ΡƒΠΊΠ°Π·Π°Π² Ρ‚Π°ΠΊΠΆΠ΅Β -XX:+UseG1GC. +% Π’Ρ‹Π²ΠΎΠ΄: + +% Hash of the first object: [C@726f3b58 +% Cache of the second object: [C@442d9b6e +% Started the garbage collector +% Hash of the first object: [C@442d9b6e +% Cache of the second object: [C@442d9b6e + + +% Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: создав Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽΒ new,Β ΠΌΡ‹Β ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с разными ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Ρ…Π΅ΡˆΠ°ΠΌΠΈ для массивов Π±Π°ΠΉΡ‚. Запустив сборщик мусора ΠΈΒ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя (дСдупликация нС происходит ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ), ΠΌΡ‹Β Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ…Π΅ΡˆΠΈ для Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² стали ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ (ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π°Β ΠΎΠ΄ΠΈΠ½ ΠΈΒ Ρ‚ΠΎΡ‚Β ΠΆΠ΅ массив). +% Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ это выглядит Ρ‚Π°ΠΊ Π΄ΠΎ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ: + +% ПослС Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ: + +% ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹: + +% ДСдупликация строк доступна с Java 8 Update 20 + +% Она активируСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹:Β -XX:+UseStringDeduplication + +% ДСдупликация строк Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со сборщиком мусора G1. Для Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π²Β Java 8Β Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹Β -XX:+UseG1GC. Начиная с Java 9, G1 являСтся сборщиком мусора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +% ΠžΠΏΡ‹Ρ‚Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ строк сокращаСт расходы ΠΊΡƒΡ‡ΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 10%, Ρ‡Ρ‚ΠΎ, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, учитывая, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄ +% ДСдупликация строк Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π· приостановлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния +% Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡƒΠ»Π° строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для строк, ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ intern(), ΠΈΠ»ΠΈ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ для строк, созданных динамичСски Π²ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ прилоТСния, дСдупликация строк ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° для строк, созданных всСми этими способами + + diff --git a/scenarios/jtd1-06b.tex b/scenarios/jtd1-06b.tex new file mode 100644 index 0000000..61a65a4 --- /dev/null +++ b/scenarios/jtd1-06b.tex @@ -0,0 +1,110 @@ +\documentclass[../j-spec.tex]{subfiles} + +\begin{document} +\section{Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹} +\begin{longtable}{|p{35mm}|p{135mm}|} +\hline +Π­ΠΊΡ€Π°Π½ & Π‘Π»ΠΎΠ²Π° \\ \hline +\endhead + +Π’ΠΈΡ‚ΡƒΠ» & ЗдравствуйтС, Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° курс посвящённый ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΆΠ°Π²Π° \\ \hline + +ΠžΡ‚Π±ΠΈΠ²ΠΊΠ° & ΠΈ сСгодня Π½Π° повСсткС дня Ρƒ нас интСрфСйсы, Π½ΠΎ Π½Π΅ Ρ‚Π΅ интСрфСйсы, Ρ‡Ρ‚ΠΎ графичСскиС, Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅. \\ \hline + +На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ & На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах ΠΈ прСдставлСнии Π΄Π°Π½Π½Ρ‹Ρ… Π² Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… устройствах; ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΠΎ посмотрСли Π½Π° популярныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных ссылочных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… String ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ стрингбилдСр ΠΈ стрингпул. \\ \hline + +На этом ΡƒΡ€ΠΎΠΊΠ΅ & ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± интСрфСйсах, рассмотрим понятиС ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌ словС implements; НаслСдованиС ΠΈ мноТСствСнноС наслСдованиС интСрфСйсов, рСализация, значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ частичная рСализация интСрфСйсов. ЕстСствСнно, Ρ‡Ρ‚ΠΎ говоря ΠΎΠ± интСрфСйсах нСльзя Π½Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсах ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… классах. ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ рассмотрим ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΏΡ€ΠΈ использовании интСрфСйсов ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π½Ρ‹Ρ… процСссах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π°Π½Π½Π΅Π΅ ΠΈ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ связываниС Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. \\ \hline + +06-01 & Π Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ± интСрфСйсах Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ Π½Π° лСкциях ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π° ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ практичСской ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π΄Π΅-Ρ‚ΠΎ Π² сСрСдинС Π»Π΅ΠΊΡ†ΠΈΠΈ Ρƒ вас слоТилось явноС Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΡƒΡ‚ явно ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, Π° ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ интСрфСйсы, Π²Ρ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈ Β«Π°Π°Π°Π°Π° Ρ‚Π°ΠΊ Π²ΠΎΡ‚ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈ ΠΊΠ°ΠΊ примСняСтся», Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ тСорСтичСской ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΈ особСнностях. \\ \hline + +ΠžΡ‚Π±ΠΈΠ²ΠΊΠ° & ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° \\ \hline + +06-02 & Π˜Ρ‚Π°ΠΊ Π½Π°Ρ‡Π½Ρ‘ΠΌ с ΠΏΡ€Π΅Π°ΠΌΠ±ΡƒΠ»Ρ‹, здСсь я ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽ вас Π½Π΅ особСнно ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π° Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° взаимодСйствиСм ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ интСрфСйсы, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ сСгодня ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ - это ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Код ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСпростым, Π½ΠΎ Π·Π°Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΡ‹ поставим Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π±Π΅Π· интСрфСйсов Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ - Ρƒ вас, ΠΊΠ°ΠΊ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΈ сказал, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Β«ΠΎ, Ρ‚Π°ΠΊ Π²ΠΎΡ‚ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹Β». ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ слоТно? ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ нСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠΎΠΏ - Π½Π°Π΄ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.\\ \hline + +06-03 & Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ? ΠΌΡ‹ сдСлаСм Π½Π΅ΠΊΠΈΠΉ нСбольшой набросок своСго собствСнного ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ 2Π΄ Π΄Π²ΠΈΠΆΠΊΠ°, Π±Π΅Π· Ρ„ΠΈΠ·ΠΈΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Π° просто с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, чисто дСмонстрационный. Π½Π° Π΅Π³ΠΎ основС ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π·Π°ΠΏΠΈΠ»ΠΈΡ‚ΡŒ, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. На слайдС Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠΊΠ½ΠΎ, ΠΊΡ€ΡƒΠΆΠΊΠΈ Π»Π΅Ρ‚Π°ΡŽΡ‚ (ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π²Π²ΠΈΠ΄Ρƒ, ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΏΠ»Π°Π²Π½ΠΎ, Ссли Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ дёргаСтся, это ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ с Π½ΠΈΠ·ΠΊΠΈΠΌ ЀПБ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚, Π° Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ‚ΡƒΡ‚ Π½Π΅ обрабатываСтся, Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠΌ Π½Π΅ происходит. Π˜Ρ‚Π°ΠΊ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ понадобится, это ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Π½Π° ΠΎΠΊΠ½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Π½Π²Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ всё Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ собствСнно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ. \\ \hline + +06-04 & Быстро создаём ΠΎΠΊΠ½ΠΎ, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ константы с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ, ΠΈ конструктор ΠΎΠΊΠ½Π° прямо здСсь ΠΆΠ΅ вмСстС с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΌΠ΅ΠΉΠ½, Π½Π΅ вдаваясь Π² подробности Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ свинг Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ всё это пишСм, Π½Π° эту Ρ‚Π΅ΠΌΡƒ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ООП, многопоточности ΠΈ ΠΎΡ‚Π»ΠΎΠ²Ρƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² графичСских интСрфСйсах. Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ для нас сСйчас - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ свойствами ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, стартуСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, создаём ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΊΠ½Π°, Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ находится ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ, Π° ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°ΠΆΠΌΡ‘ΠΌ Π½Π° крСстик, Ρ‚ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΊΠ½ΠΎ, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. \\ \hline + +06-05 & Π˜Ρ‚Π°ΠΊ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ JPanel, с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΎ самоС интСрСсноС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Π½Ρ‘ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ. Π˜Ρ‚Π°ΠΊ создали наслСдника Jpanel с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ GameCanvas. Π§Ρ‚ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ любой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² свингС? ΠΎΠ½ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ, посрСдством Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° paintComponent. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Из Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡΠΈΠ½Ρ‚ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ вызываСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π½Π΅Π»ΡŒΠΊΡƒ. ΠœΡ‹ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΈ напишСм свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ пСрСрисовки. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚Π°ΠΊ: создадим конструктор этой пСнльки, ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π² конструкторС Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° Π½Π° синий. Π—Π°ΠΎΠ²Π΅Ρ€Ρ€Π°ΠΉΠ΄ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½Ρ‚ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ Ρ‚ΡƒΡ‚-ΠΆΠ΅ Π²Ρ‹Π·Π²Π°Π»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ сути ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ нас Π²ΠΏΠΎΠ»Π½Π΅ устраиваСт Ρ‚ΠΎ, ΠΊΠ°ΠΊ пСрСрисовываСтся панСлька, Π½ΠΎ ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‚ΡƒΠ΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. Ну ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ нашСй ΠΊΠ°Π½Π²Ρ‹, Π»Π΅Π²ΡƒΡŽ, ΠΏΡ€Π°Π²ΡƒΡŽ, Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ, ниТнюю.\\ \hline + +06-06 & Наладим взаимодСйствиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ привяТСм всС дСйствия нашСго ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ физичСского ΠΌΠΈΡ€Π°. Π’ нашСм основном окошкС, Π² конструкторС, создали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса GameCanvas ΠΈ располоТили Π΅Ρ‘ Π½Π° ΠΎΠΊΠ½Π΅ прям Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅. Пока Ρ‡Ρ‚ΠΎ всё понятно ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ³Ρ€Ρ‹ прям здСсь, Π² классС панСльки, Π½ΠΎ это Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, вСдь это ΠΆΠ΅ ΠΊΠ°Π½Π²Π° Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ рисуСм, Π·Π½Π°Ρ‡ΠΈΡ‚ здСсь ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рисованиСм Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅ΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ³Ρ€Ρ‹ Π² нашСм классС с ΠΊΡ€ΡƒΠΆΠΊΠ°ΠΌΠΈ, Π° GameCanvas Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ всё Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Для этого описали Π² нашСм основном окошкС ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°Π·Π²Π°Π»ΠΈ Π΅Π³ΠΎ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ onDrawFrame ΠΈ Π² Π½Ρ‘ΠΌ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° для нашСго ΠΌΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° - Π°ΠΏΠ΄Π΅ΠΉΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС нашСго прилоТСния, ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ всяким Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ. \\ \hline + +06-07 & Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ пСрСрисовкС наш с Π²Π°ΠΌΠΈ GameCanvas этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Ρ‘Ρ€Π³Π°Π», ΠΈ Ρ‚Π΅ΠΌ самым ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ-Ρ‚ΠΎ мСнялось. Для этого нашСй ΠΊΠ°Π½Π²Π΅ Π½Π°Π΄ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‡Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ‘Ρ€Π³Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΎΠ½Π° находится. создаём Π² классС ΠΊΠ°Π½Π²Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая ΡƒΠΌΠ΅Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса MainCircles ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² конструкторС. И Π² ΠΏΡΠΈΠ½Ρ‚ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ controller.onDrawFrame(); Π”Π°Π»Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΡ‚ΡŒ это дСйствиС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΉΡ‚ΠΈ нСсколькими путями: самый простой - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ постоянно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰ΡƒΡŽΡΡ ΠΊΠ°Π½Π²Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΡΠΈΠ½Ρ‚ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Π·ΡΡ‚ΡŒ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ repaint() Π½ΠΎ это Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ прямо скаТСм "Ρ‚Π°ΠΊ сСбС", ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ядСр процСссора Ρ‚ΠΎΠ»ΡŒΠΊΠΎ отрисовкой ΠΎΠΊΠ½Π° - Π½Π΅ самоС Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ядСр. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ - это ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°Π³ΠΈΠΈ ΠΈΠ· занятия ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ. ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ наш ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΏΠΎΡΠΏΠ°Ρ‚ΡŒ, начиная с 20-ΠΉ строки Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, смысл ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ понятСн Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Thread.sleep(16); это даст Π½Π°ΠΌ фпс Π±Π»ΠΈΠ·ΠΊΠΈΠΉ ΠΊ 60, ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ для условной ΠΈΠ³Ρ€Ρ‹, Π½Π΅ Π½Π°Π΄ΠΎ Π½ΠΈ большС Π½ΠΈ мСньшС, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ отрисовали ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, посчитали Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ измСнится Π°ΠΏΠ΄Π΅ΠΉΡ‚ΠΎΠΌ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° отрисовку Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠΌ, отрисовали ΠΏΡΠΈΠ½Ρ‚ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.\\ \hline + +06-08 & Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ интСрСсно, кстати, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ этом измСнился ΠΊΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ конструктор ΠΊΠ°Π½Π²Ρ‹, вСдь ΠΌΡ‹ ΠΈΠ· основного класса с ΠΎΠΊΠ½ΠΎΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π² ΠΊΠ°Π½Π²Ρƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ это самоС основноС ΠΎΠΊΠ½ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, для этой Ρ†Π΅Π»ΠΈ ΠΌΡ‹ примСняСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса this, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² конструкторС основного ΠΎΠΊΠ½Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ссылку Π½Π° экзСмпляр этого ΠΎΠΊΠ½Π° ΠΊΠ°Π½Π²Π΅. Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠ΅ использованиС для обращСния ΠΊ полям Π² конструкторС, Π½ΠΎ, ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‚ΠΎ Π»ΠΈ Π΅Ρ‰Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ способ примСнСния ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this, ΠΎΠ½ Π½Π°ΠΌ сСгодня Π΅Ρ‰Ρ‘ пригодится. \\ \hline + +06-09 & Π—Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ с отрисовкой ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ onDrawFrame. Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ сцСну ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Ρ‘. Для обновлСния сцСны Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π·Π½Π°Ρ‚ΡŒ Π΄Π΅Π»ΡŒΡ‚Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, которая ΠΏΡ€ΠΎΡˆΠ»Π° с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ„ΠΈΠ·ΠΈΠΊΡƒ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΠΈΠ·ΠΈΠΊΡƒ, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° частоту ΠΊΠ°Π΄Ρ€Π°, ΠΈΠ»ΠΈ Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΌ спим 16миллисСкунд, Π½ΠΎ это всё ΠΎΡ‡Π΅Π½ΡŒ ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠΏΠΎΡ€Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ спим 16миллисСкунд, Π½ΠΎ сколько ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΏΠ°Ρ‚ΡŒ нСизвСстно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ отрисовка происходит Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· фиксированныС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΅Ρ‰Ρ‘ ΠΊΡƒΡ‡Π° Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π›ΡƒΡ‡ΡˆΠ΅ всСго Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π°. поэтому сдСлаСм Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ onDrawFrame эту ΡΠ°ΠΌΡƒΡŽ Π΄Π΅Π»ΡŒΡ‚Ρƒ Ρƒ ΠΊΠ°Π½Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π» ΠΈ ΠΎΡ‚Π΄Π°Π²Π°Π» ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ обновлСния. БоотвСтствСнно считаСм Π΄Π΅Π»ΡŒΡ‚Ρƒ Π² ΠΊΠ°Π½Π²Π΅. Π’ΠΎΡ‚, собствСнно ΠΈ вся Ρ„ΠΈΠ·ΠΈΠΊΠ°, которая Π½Π°ΠΌ понадобится. Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π²ΠΎΡ‚ Π½Π° Ρ‡Ρ‚ΠΎ - Ρƒ нас Π² ΠΏΡΠΈΠ½Ρ‚ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΈΠ»Π΅Ρ‚Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса графикс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚, ΠΊΠ°ΠΊ это Π½ΠΈ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π·Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π° рисованиС. Π­Ρ‚ΠΎ ΠΆΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ этот самый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚Π΄Π°Π΄ΠΈΠΌ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ onDrawFrame, ΠΏΡƒΡΡ‚ΡŒ ΠΎΠ½ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ рисуСт. Π° Π³Π΄Π΅ рисуСт? Π½Π° ΠΊΠ°Π½Π²Π΅, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π·Π½Π°Ρ‚ΡŒ Π΅Ρ‘ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ°Π½Π²Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ? нашСй, Ρ‚ΠΎΠΉ самой. сСбя ΠΈ ΠΎΡ‚Π΄Π°Π΄ΠΈΠΌ. onDrawFrame Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ - Π°ΠΏΠ΄Π΅ΠΉΡ‚Ρƒ отдаст Π΄Π΅Π»ΡŒΡ‚Ρƒ ΠΈ ΠΊΠ°Π½Π²Ρƒ, Π° Ρ€Π΅Π½Π΄Π΅Ρ€Ρƒ - ΠΊΠ°Π½Π²Ρƒ ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ. Для ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ВсС измСнСния ΠΊΠ°Π½Π²Ρ‹ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° слайдС, всС измСнСния основного ΠΎΠΊΠ½Π° Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ½Π”Ρ€ΠΎΠ€Ρ€Π΅ΠΉΠΌ, Π½Π° Π½Π΅Ρ‘ ΠΌΡ‹ посмотрим Ρ‡Π΅Ρ€Π΅Π· нСсколько сСкунд. Пока самоС Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎΠ± этих Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… - ΠΊΠ°Π½Π²Π° считаСт для нас врСмя ΠΈ постоянно пСрСрисовываСт сСбя, сообщая ΠΎΠ± этом Ρ„Π°ΠΊΡ‚Π΅ основному ΠΎΠΊΠ½Ρƒ, Π° основноС ΠΎΠΊΠ½ΠΎ Π½Π° этот Ρ„Π°ΠΊΡ‚ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚. Ну ΠΈ ООП Π²ΠΎΠΊΡ€ΡƒΠ³ этого Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ссылки Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Ρƒ Π΄Ρ€ΡƒΠ³Π° всякиС интСрСсныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. \\ \hline + +06-10 & Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‡Ρ‚ΠΎ Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ нашСго с Π²Π°ΠΌΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΡΠΌΡƒΡŽ Π±Π΅Π»ΡƒΡŽ линию. Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ получаСтся, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡƒΠΌΠ΅Π΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈ наша ΠΊΠ°Π½Π²Π° ΡƒΠΌΠ΅Π΅Ρ‚ это ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ. НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π±ΡƒΠ΄ΡƒΡ‚ это ΠΊΡ€ΡƒΠΆΠΊΠΈ, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠΈ, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Ρ‡Π΅Π»ΠΎΠ²Π΅Ρ‡ΠΊΠΈ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - Π½Π΅ Π²Π°ΠΆΠ½ΠΎ. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΎ описан ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ, ΠΎ Ρ‡Ρ‘ΠΌ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» ΠΈ Π³ΠΎΠ²ΠΎΡ€ΡŽ - ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ООП. Мало просто ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡƒΡ€ΠΎΠΊΠΈ, ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠΆΠΊΠΈ, ΠΏΠΎΡΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° сСминарС. Надо ΡΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ООП. Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠ°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. Π― понимаю вас, Π²Ρ‹ смотритС сСйчас, ΠΈ Π²Ρ€ΠΎΠ΄Π΅ всё понятно, Π° сами Π² ΠΆΠΈΠ·Π½ΠΈ Π±Ρ‹ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ написали. Π― сам нСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΆΠΈΠ·Π½ΠΈ Π½Π΅ написал Π±Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅, всё ΠΏΡ€ΠΈΠ΄Ρ‘Ρ‚ с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ. Π“Π»Π°Π²Π½ΠΎΠ΅, Π½Π΅ ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ понятия ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π½Π°Ρ‚ΡŒ язык программирования. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ°Π΅Ρ‚Π΅ сСбя Π½Π° мысли, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΈ условиях, Π° Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции, Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ взаимосвязях, ΠΎΠ± Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Π° ΠΏΠ°Π»ΡŒΡ†Ρ‹ сами Π½Π°Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ языковыС конструкции. \\ \hline + +06-11 & БоотвСтствСнно, Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ просто Π»ΠΈΠ½ΠΈΠΈ ΠΊΡ€ΡƒΠ³ΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅ - довольно скучно, поэтому Π±ΡƒΠ΄Π΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ класс Π‘ΠΏΡ€Π°ΠΉΡ‚. Ни ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. ΠŸΡ€ΠΎΡΡ‚ΠΎ опишСм ΠΎΠ±Ρ‰Π΅Π΅ для всСх рисуСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρƒ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ? Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, мСстополоТСниС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ графичСский Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρƒ этого Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° находится Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ. Однако ΠΎΡ‡Π΅Π½ΡŒ часто, ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ³Ρ€Ρ‹ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прилоТСния с использованиСм Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² качСствС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†Π΅Π½Ρ‚Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Π΄ΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡ‚ΡŒΡΡ - Ρ‡Ρ‚ΠΎ Ρ… ΠΈ Ρƒ - это Ρ†Π΅Π½Ρ‚Ρ€ любого Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° нашСй ΠΊΠ°Π½Π²Π΅. И соотвСтствСнно ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ Π΄Π»ΠΈΠ½Ρƒ-ΡˆΠΈΡ€ΠΈΠ½Ρƒ, Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΡˆΠΈΡ€ΠΈΠ½Ρ‹. А Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° соотвСтствСнно Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡƒΡ‡ΠΈΠΌ наш спрайт Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ. Ну ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΠΌ, просто скаТСм, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Π° Π΅Π³ΠΎ наслСдники ΠΏΡƒΡΡ‚ΡŒ ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ хотят это Π΄Π΅Π»Π°Ρ‚ΡŒ. Но спрайты Π»ΠΈΡˆΠ΅Π½Ρ‹ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΎΠ½ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈΡ… свойства. \\ \hline + +06-12 & ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ СстСствСнно Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс собствСнно ΡˆΠ°Ρ€ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ экрану ΠΏΡ€Ρ‹Π³Π°Ρ‚ΡŒ, Π° Ρ‚ΠΎ нСпорядок ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ. Π’ конструкторС Π·Π°Π΄Π°Ρ‘ΠΌ Π΅ΠΌΡƒ рэндомныС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅ΠΌ Π΅ΠΌΡƒ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ свойства. МоТно ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ наш спрайт ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π΅ΠΌΡƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ физичСскиС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, Π½ΠΎ ΠΌΡ‹ ΠΆ с Π²Π°ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ пишСм, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅ΠΌ Π΅ΠΌΡƒ просто - ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠΎ осям Ρ… ΠΈ Ρƒ соотвСтствСнно ΠΈ Ρ†Π²Π΅Ρ‚. для Ρ†Π²Π΅Ρ‚Π° Π΅ΡΡ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ класс Color ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π Π“Π‘ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 255. Для ΡˆΠ°Ρ€ΠΈΠΊΠ° пСрСопрСдСляСм Π°ΠΏΠ΄Π΅ΠΉΡ‚ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€. супСры Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΎΠ½ΠΈ всё Ρ€Π°Π²Π½ΠΎ пустыС. Π‘Π°ΠΌΡ‹ΠΉ простой Ρ€Π΅Π½Π΄Π΅Ρ€ - ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ Ρ†Π²Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡˆΠ°Ρ€ΠΈΠΊΠ° ΠΈ сдСлаСм fillOval, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π»Π΅Π²ΠΎ, Π²Π΅Ρ€Ρ…, ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ содСрТат поля Ρ‚ΠΈΠΏΠ° Ρ„Π»ΠΎΡƒΡ‚, ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с пиксСльной систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ всё сразу ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΌΠΈΡ€ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€ экрана Π·Π° 0, Π²Π΅Ρ€Ρ… ΠΈ Π»Π΅Π²ΠΎ Π·Π° -1 Π½ΠΈΠ· ΠΈ ΠΏΡ€Π°Π²ΠΎ Π·Π° 1, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ OpenGL) Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ экраны). Но это Π½Π°ΠΌ ΠΈ пяти Π»Π΅ΠΊΡ†ΠΈΠΉ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. А Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚ ΠΌΡ‹ просто прибавляСм ΠΊ нашим Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ Π½Π°ΡˆΡƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π° Π΄Π΅Π»ΡŒΡ‚Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ классС. РасстояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ наш ΡˆΠ°Ρ€ΠΈΠΊ Π·Π° Ρ‚ΠΎ врСмя ΠΏΠΎΠΊΠ° наш ΠΏΠΎΡ‚ΠΎΠΊ спал ΠΈ наша ΠΊΠ°Π½Π²Π° Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ»Π°ΡΡŒ. Π½Ρƒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ отскоки, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ описываСм 4 условия, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΡ‹ мСняСм Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. \\ \hline + +06-13 & Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΈΠ»ΠΈΠΌ основной класс ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ бСсСдС ΠΎΠ± интСрфСйсах ΡƒΠΆΠ΅, Π° Ρ‚ΠΎ Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ Π²Ρ‹ подустали ΠΎΡ‚ вступлСний. Π’ основном классС ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ прямолинСйно - создаём классовый массив ΠΈΠ· спрайтов ΠΈ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ sprites ΠΈ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ нас допустим 1 ΠΊΡ€ΡƒΠΆΡ‡Π΅ΠΊ. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚ ΠΌΡ‹ пробСТимся ΠΏΠΎ всСм спрайтам ΠΈ скаТСм ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… - Π°ΠΏΠ΄Π΅ΠΉΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ‹ ΡƒΠΌΠ΅Π΅ΡˆΡŒ. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Ρ€Π΅Π½Π΄Π΅Ρ€ ΠΌΡ‹ сдСлаСм Ρ‚ΠΎΠΆΠ΅ самоС - пробСТимся ΠΏΠΎ всСм спрайтам ΠΈ скаТСм - отрисуйся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ. И всё, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ обновлСния ΠΈ отрисовки ΠΌΡ‹ оставили самим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ инкапсулировали Π² Π½ΠΈΡ…, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сам ΠΏΠΎ сСбС Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅ΠΌΡƒ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΊΠ°ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π° основной экран ΡƒΠΆΠ΅ управляСт - Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ°Π½Π²Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠΎΠ³ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ. Π˜Ρ‚Π°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΌ ΡˆΠ°Ρ€ΠΈΠΊΠΎΠΌ ΠΈ напишСм Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ магию ΠΏΠΎ добавлСнию Π½ΠΎΠ²Ρ‹Ρ… ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² Π² динамичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ массив. Как извСстно, Π² Π΄ΠΆΠ°Π²Π° всС массивы ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ограничСния Π½Π° программиста, Π½ΠΎ ΠΌΡ‹ ΠΆ с Π²Π°ΠΌΠΈ ΠΊΡ€ΡƒΡ‚Ρ‹Π΅ программисты, Π²ΠΎΠ½ сколько Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈ сСминаров ΠΏΠΎΠ·Π°Π΄ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΠΌΠ°Π½ΡƒΡ‚ΡŒ систСму. Код Π½Π΅ слоТный, ΠΊΠΎΠ³Π΄Π° старый массив заполнился, просто ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΈ пСрСносим ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΈΠ· старого Π² Π½ΠΎΠ²Ρ‹ΠΉ. \\ \hline + +06-14 & И ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ‚ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ. ΠœΡ‹ Π½Π° Π½Π°ΡˆΡƒ ΠΊΠ°Π½Π²Ρƒ Π² конструкторС вСшаСм ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ ΠΌΡ‹ΡˆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ рассказываСт ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ события. БСгодня ΠΊΠ°ΠΊ Ρ€Π°Π· Π±ΡƒΠ΄Π΅ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ классы ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом явлСнии ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. И ΠΏΠΎ этому ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ - добавь Π½Π°ΠΌ спрайт с Π½ΠΎΠ²Ρ‹ΠΌ мячиком, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ этого события. Для этого ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс ΡˆΠ°Ρ€ΠΈΠΊΠ°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сразу Π·Π°Π΄Π°Ρ‘Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. На ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΊΠΈ повСсим ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ спрайта ΠΈΠ· списков обновлСния ΠΈ отрисовки. \\ \hline + +06-15 & ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, ΠΌΡ‹ мСньшС Ρ‡Π΅ΠΌ Π·Π° полчаса написали довольно простоС ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рисуСт Π²Π΅Ρ‰ΠΈ, Π½ΠΎ ΠΈ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚, каТСтся, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ. Напомню, Ρ‡Ρ‚ΠΎ самоС Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ· этого прилоТСния ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ - это взаимодСйствия ΠΈ взаимовлияния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НаслСдованиС, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, инкапсуляция ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΈ свойств. Если чСстно, я слСгка устал ΠΎΡ‚ синСго Ρ†Π²Π΅Ρ‚Π° нашСго Ρ„ΠΎΠ½Π° ΠΈ Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс Ρ„ΠΎΠ½Π°, Π½ΠΎ сразу столкнулся с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ. Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΠ½ - это спрайт, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ всСгда Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Π½ΠΎ Π²ΠΎΡ‚ Π±Π΅Π΄Π°, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° Ρ„ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² отрисовкС я просто Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΊΠ°Π½Π²Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свой Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°, Π° Ρ‡Ρ‚ΠΎ, ссылка Ρ‚ΠΎ Π½Π° ΠΊΠ°Π½Π²Ρƒ Ρƒ мСня Π΅ΡΡ‚ΡŒ. Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° я мСняю ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ†Π²Π΅Ρ‚Π°, поэтому ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ происходит довольно ΠΏΠ»Π°Π²Π½ΠΎ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, получаСтся, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ спрайта Π½Π°ΠΌ фактичСски Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π° свойства Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Но ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ наслСдования Π½Π°ΠΌ Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ смоТСм Ρ„ΠΎΠ½ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ Π² составС массива спрайтов ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π°Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ нас Π½Π° ΠΌΡ‹ΡΠ»ΡŒ ΠΎΠ± ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ повСдСния, Π½Π° ΠΌΡ‹ΡΠ»ΡŒ ΠΎΠ± интСрфСйсС. \\ \hline + +ΠžΡ‚Π±ΠΈΠ²ΠΊΠ° ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ интСрфСйса & ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ наслСдования ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½, Π½ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ свои ограничСния. Π’ частности ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ языка Π‘++, Π³Π΄Π΅ имССтся мноТСствСнноС наслСдованиС \\ \hline + +Ρ„ΠΎΡ‚ΠΎ руля-ΠΏΠ΅Π΄Π°Π»Π΅ΠΉ-ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Ρ„ΠΎΡ‚ΠΎ юсб, Ρ„ΠΎΡ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹-ΠΌΡ‹ΠΊΠΈ-ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° & Π’ языкС Java эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ частично ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ интСрфСйсы. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ классы, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ эти интСрфСйсы. И ΠΎΠ΄ΠΈΠ½ класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство интСрфСйсов. Если ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅, интСрфСйс ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ-ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΡƒΠ±ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ-ΠΎΡ‡Π΅Π½ΡŒ абстрактный класс. Π”ΠΎ сСдьмой Π΄ΠΆΠ°Π²Ρ‹ это Π±Ρ‹Π» просто Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Начиная с восьмой Π½Π°Π΄Π΅Π»Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ тонкостСй, с Π½ΠΈΠΌΠΈ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ. Π˜Ρ‚Π°ΠΊ интСрфСйс - это описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ интСрфСйса Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрфСйс управлСния Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ, интСрфСйс взаимодСйствия с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ интСрфСйс USB, Ρ‚Π°ΠΊ, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ находится ΠΏΠΎ Ρ‚Ρƒ сторону ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°, Ρ„Π»Π΅ΡˆΠΊΠ°, Π²Π΅Π±-ΠΊΠ°ΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, Π° Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с интСрфСйсом USB, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ Ρ‡ΡƒΡ‚ΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅ - это Ρ‚ΠΎΠΆΠ΅ своСго Ρ€ΠΎΠ΄Π° интСрфСйс, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Π°ΠΉΠ». ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΎ всСх интСрфСйсах всСгда ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅, ΠΈ Π² классичСском Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Ну ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСгда ΠΏΠ°Π±Π»ΠΈΠΊ Ρ‚ΠΎ этот ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ принято просто Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ. Для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° это Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈ сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ, Π° Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ, ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄ΠΆΠ°Π²Ρ‹ ΠΈ ΠΏΠΎΠΉΠ΄Ρ‘ΠΌ дальшС. \\ \hline + + & \\ \hline + & \\ \hline + & \\ \hline + & \\ \hline + & \\ \hline + & \\ \hline + & \\ \hline + & \\ \hline + & \\ \hline + +\end{longtable} +\end{document} + +****** Для Ρ‡Π΅Π³ΠΎ ΠΆΠ΅? + НапримСр, создадим ΠΏΠ°Ρ€Ρƒ классов, классА ΠΈ классБ. КлассА Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ нас Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсА. Π’ΠΎ Π΅ΡΡ‚ΡŒ мноТСствСнного наслСдования Π½Π΅Ρ‚, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ интСрфСйсов. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс - ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π»ΠΈΠ±ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс абстрактным. Π’ΠΎΡ‚, статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² ΠΈΠ΄Π΅Π΅ Π½Π°ΠΌ ΠΎΠ± этом явно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚. Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΌΠΎΠ΄Π½ΠΎΠ΅ сообщСниС ΠΎ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ это класс1 ΠΈΠ»ΠΈ класс2. + И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ самая соль - ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² мэйнС ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классы ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ интСрфСйсА. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΡƒΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связанныС ΠΌΠ΅ΠΆΠ΄Ρƒ собой сущности, Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ интСрфСйсА. И ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ для Ρ€Π°Π·Π½Ρ‹Ρ… классов Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. Π’Π°ΠΊΠΎΠΉ Π²ΠΎΡ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ΠŸΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ насколько сильно это отличаСтся ΠΎΡ‚ наслСдования, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ с Π²Π°ΠΌΠΈ создавали ΠΎΠ±Ρ‰ΠΈΠΉ абстрактный класс ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ ΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ наслСдовали Π½Π°ΡˆΠΈΡ… ΠΊΠΎΡ‚ΠΈΠΊΠΎΠ²? +****** Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ + Π§Ρ‚ΠΎ Π² интСрфСйсах Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ наслСдованиС. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ нас интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ интСрфСйса, соотвСтствСнно ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ нашСго интСрфСйса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΡƒΡ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° наслСдованиС классов +****** ВСрнёмся ΠΊ бэкграунду + Он наслСдуСтся ΠΎΡ‚ спрайта, Π½ΠΎ Π΅ΠΌΡƒ ΠΎΡ‚ спрайта Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΈΡˆΠ΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. И Π²ΠΎΡ‚ слоТилась ситуация Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ массивС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Как ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ? +****** НапишСм Π½Π΅ΠΊΠΈΠΉ интСрфСйс, Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Π΅Π³ΠΎ GameObject + ΠΈ скаТСм, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π°ΠΏΠ΄Π΅ΠΉΡ‚ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€, Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ это Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π°ΠΏΠ΄Π΅ΠΉΡ‚ΠΈΡ‚ΡŒΡΡ. Π˜Π΄Ρ‘ΠΌ Π² спрайт, ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ интСрфСйс Π³Π΅ΠΉΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ сломалось, ΠΊΡ‚ΠΎ навскидку скаТСт, ΠΏΠΎΡ‡Π΅ΠΌΡƒ? (ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Π±Π»ΠΈΠΊΠΎΠΌ). И Π€ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Π³Π΅ΠΉΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈ этом получаСтся, Ρ‚ΠΎ Ρ„ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связан со спрайтом, Ρƒ Π½ΠΈΡ… Π΄Π°ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ Ρ€Π°Π·Π½Ρ‹ΠΉ. Но ΠΎΠ±Π° ΡƒΠΌΠ΅ΡŽΡ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π°ΠΏΠ΄Π΅ΠΉΡ‚ΠΈΡ‚ΡŒΡΡ, благодаря интСрфСйсу. +****** Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ΄Ρ‘ΠΌ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ основноС ΠΎΠΊΠ½ΠΎ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ + Π—Π΄Π΅ΡΡŒ всё просто, ΠΌΡ‹ массив спрайтов мСняСм Π½Π° массив Π³Π΅ΠΉΠΌΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Вопросы, ΠΎΡ†Π΅Π½ΠΊΠ° слоТности. +***** Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ +****** Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим со стороны + Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚ΡƒΡ‚ понаписали. Π£ Π½Π°ΡˆΠΈΡ… классов ΠΊΠ°Π½Π²Ρ‹ ΠΈ спрайта, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρƒ интСрфСйса Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ спСцифики, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡˆΡ‚ΡƒΠΊΠΎΠ²ΠΈΠ½Ρ‹. +****** создадим ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ + Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, Π½ΠΎΠ²Ρ‹ΠΉ класс, скопипастим Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всё Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ. И Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΆΠ΅ Π½Π°ΠΌ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΉ спрайты ΠΈ интСрфСйсы. сдСлаСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ. Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ получаСтся, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ³Ρ€Ρ‹ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ рСализациями. создадим ΠΏΠ°ΠΊΠ΅ КОММОН ΠΈ пСрСносим Ρ‚ΡƒΠ΄Π° ΠΊΠ°Π½Π²Ρƒ, спрайт ΠΈ Π³Π΅ΠΉΠΌΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ Ρ‰Π° Π±ΡƒΠ΄Π΅ΠΌ всё Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ. + Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° понятна? + Π§Ρ‚ΠΎ Π½Π΅ нравится ΠΊΠ°Π½Π²Π΅? ΠΎΠ½Π΄Ρ€ΠΎΡ„Ρ€Π΅ΠΉΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ°Π±Π»ΠΈΠΊ + Π§Ρ‚ΠΎ Π½Π΅ нравится мэйн Π²ΠΈΠ½Π΄ΠΎΡƒ? Π³Π΅ΠΉΠΌ канвас Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°Π±Π»ΠΈΠΊ + Π“Π΅ΠΉΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ это интСрфСйс, Π΅ΠΌΡƒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π° всё ΠΏΠ»Π΅Π²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ лишниС Π²Ρ‹ΠΊΠΈΠ½Π΅ΠΌ + Π‘ΠΏΡ€Π°ΠΉΡ‚ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ сломался + Π˜Π΄Ρ‘ΠΌ Π² ΡˆΠ°Ρ€ΠΈΠΊ ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ спрайта, сдСлаСм спрайт ΠΏΠ°Π±Π»ΠΈΠΊΠΎΠΌ + ΠΎΠ½ ΠΆΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅Ρ‚ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, сдСлаСм ΠΈΡ… ΠΏΡ€ΠΎΡ‚Π΅ΠΊΡ‚Π΅Π΄ + ΠΎΠ½ ΠΆΠ΅ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°Π½Π²Ρ‹. сдСлаСм ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ + И ΠΈΠ΄Ρ‘ΠΌ Π² мэйн, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚? ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ конструктор ΠΊΠ°Π½Π²Ρ‹. Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠ°Π±Π»ΠΈΠΊΠΎΠΌ +****** Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ‚ΠΈΠΌ + конструктор, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. И Π²ΠΎΡ‚ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нашСй ΠΊΠ°Π½Π²ΠΎΠΉ. Но Π½Π΅ Π΄Π°Ρ‘Ρ‚ ΠΆΠ΅. ΠΏΠΎΡ‡Π΅ΠΌΡƒ, ΠΌΡ‹ ΠΆ Ρ‚Π°ΠΊ классно всё ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ спСцифики. Но Π½Π΅Ρ‚, ΠΊΠ°Π½Π²Π° Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² конструкторС mainCircles. ΠΈ ΠΊΠ°Π½Π²Π° ΡƒΠΆΠ΅ Ρƒ этого класса Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ onDrawFrame(). Как это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ? это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ интСрфСйсом. Π½Π°ΠΌ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ интСрфСйс Π²Ρ€ΠΎΠ΄Π΅ canvasPaintListener, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠ°Π½Π²Ρ‹ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎ своСму Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈ собствСнно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот интСрфСйс. А Ρ‚ΠΎ Ρƒ нас получаСтся катастрофа - ΠΈΠ³Ρ€Ρ‹ зависят ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ. + Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ интСрфСйс с ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ сигнатуру ΠΈΠ· нашСго mainCircles. И ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ ΠΊΠ°Π½Π²Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ класс с ΡˆΠ°Ρ€ΠΈΠΊΠ°ΠΌΠΈ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»Π°, Π° canvasPaintListener, Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ листнСр. ΠΈ Π²Π΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ листнСр. + И Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ класс, с прСкрасным наслСдованиСм, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Ρ‰Ρ‘ Π±ΡƒΠ΄Π΅ΡˆΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ ΠΊΠ°Π½Π²Ρ‹. Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρƒ нас ΡƒΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ написан, с Π²Π΅Ρ€Π½ΠΎΠΉ сигнатурой. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это рСализация интСрфСйса, напишСм Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΎΠ²Π΅Ρ€Ρ€Π°ΠΉΠ΄. + Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ³Ρ€Π΅ ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ этот ΠΆΠ΅ интСрфСйс, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ ΠΊΠ°Π½Π²Π΅ сСбя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΌΠ΅Π΅ΠΌ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π²Ρƒ +***** АнонимныС классы +****** Π˜Ρ‚Π°ΠΊ всС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ + Ρ‡Ρ‚ΠΎ классы это Ρ‚Π°ΠΊΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ для нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ двиТСниями создаём ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ классы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ пишСм Π² Π½ΠΈΡ… Π»ΠΎΠ³ΠΈΠΊΡƒ, Π½ΠΎ это Π½Π΅ всё, Ρ‡Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π΄ΠΆΠ°Π²Π°. ΠšΠ»Π°ΡΡΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы - это классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² Ρ„Π°ΠΉΠ»Π΅, ΠΌΡ‹ Π΅Π³ΠΎ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. А Ρ‚Π°ΠΊΠΆΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ прямо Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ классами, Π½ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρƒ Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. + К Ρ‡Π΅ΠΌΡƒ я это Π²Π΅Π΄Ρƒ? ΠΊ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ классам. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ наш интСрфСйс Π²ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ MouseListener ΠΈ опишСм Π² Π½Ρ‘ΠΌ ΠΏΠ°Ρ€Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ mouseUp(), mouseDown(). ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π² наш основной класс ΠΈ скаТСм, Ρ‡Ρ‚ΠΎ наш Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ΠΈΠ΄ΠΈΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ экзСмпляр этого класса ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. +****** Пока Ρ‡Ρ‚ΠΎ Π»ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΡ‹ΡΠ»ΡŒ? + ΠžΡ‡Π΅Π½ΡŒ часто, ΠΊΠ°ΠΊΠΈΠ΅Ρ‚ΠΎ элСмСнты управлСния (ΠΊΠ½ΠΎΠΏΡ‡ΠΊΠΈ, события входящих Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² (ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, ΠΌΡ‹ΡˆΠΊΠ°) Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠ°ΠΊΠΈΡ… Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… события ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ это всё интСрфСйсы. Π—Π½Π°Ρ‡ΠΈΡ‚ Ссли ΠΌΡ‹ Ρ‚ΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс, Ρ‚ΠΎ это Π½Π΅Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π»ΠΎΠ²ΠΈΡ‚ΡŒ события ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. БоотвСтствСнно вСсьма часто Ρ‚Π°ΠΊΠΈΠ΅ классы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ, прямо Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Ну ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π·Π°Ρ‡Π΅ΠΌ Π΅ΠΌΡƒ имя, Ссли ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅? Π’ΠΎΡ‚ допустим Ρƒ нас Π΅ΡΡ‚ΡŒ пСрСмСнная MouseListener listener ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ экзСмпляр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот интСрфСйс. для этого Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ синтаксис: + new MouseListener дальшС пишСм интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ + {} ΠΈ Ρƒ нас ΠΏΠΎ сути открываСтся объявлСниС класса, Π³Π΄Π΅ ΠΌΡ‹ пишСм Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. И получаСтся Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создаём ΠΎΠ΄ΠΈΠ½ экзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс MouseListener. И ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ этот Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ класс ΡƒΠΆΠ΅ ΠΊΠ»Π°Π΄Ρ‘ΠΌ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ прям Π²ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄). ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, сСйчас ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΊΠ°ΠΊ, Π½ΠΎ Π² Ρ‡ΡƒΠΆΠΎΠΌ ΠΊΠΎΠ΄Π΅ это сплошь ΠΈ рядом, Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π·Π°ΠΌΠΎΡ€ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΉ синтаксис, спасибо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π΄ΠΆΠ°Π²Π°. + ΠŸΠΎΠ½ΡΡ‚Π΅Π½-Π»ΠΈ этот синтаксис? Π­Ρ‚ΠΎ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс. + Π’ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ лямбдах, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ синтаксис ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎ для этого Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ интСрфСйса, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ класс Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. +****** ВСрнёмся ΠΊ нашим ΠΊΡ€ΡƒΠΆΠΎΡ‡ΠΊΠ°ΠΌ + Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ прям ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, invokeLater() ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Runnable. Π˜Π΄Ρ‘ΠΌ Π² Runnable ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ run(). ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² invokeLater ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π Π•ΠΠ›Π˜Π—Π£Π•Π’ Π˜ΠΠ’Π•Π Π€Π•Π™Π‘ Runnable, Π²ΠΎΡ‚ описаниС этого класса, ΠΌΡ‹ Π² Π½Ρ‘ΠΌ пСрСопрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ run. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ это читаСтся. Π ΠΎΠ²Π½ΠΎ Ρ‚ΠΎΠΆΠ΅ самоС ΠΌΡ‹ сдСлали с mouseListener. Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС. Π•ΡΡ‚ΡŒ интСрфСйс MouseListener Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описаны Π²ΠΎΡ‚ эти всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. И Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс MouseAdapter Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пустыС, Π½ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ²Π΅Ρ€Ρ€Π°ΠΉΠ΄ΠΈΡ‚ΡŒ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ посчитаСм Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ. И ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ этот MouseAdapter ΠΎΡ‚Π΄Π°Ρ‘ΠΌ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ: создай Π½Π°ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ НАБЛЕДУЕВБЯ ОВ ΠšΠ›ΠΠ‘Π‘Π MouseAdapter ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ Π²ΠΎΡ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ оставляй пустыми. ЧувствуСтС Ρ€Π°Π·Π½ΠΈΡ†Ρƒ? Как ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… конструкций ΠΈ ΠΏΡ€ΠΈ этом ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ понятный ΠΊΠΎΠ΄ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… Π·Π°ΠΌΠΎΡ€ΠΎΡ‡Π΅ΠΊ? ΠžΡ‡Π΅Π½ΡŒ просто. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ наш класс - Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ интСрфСйс, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π΄Π°ΠΆΠ΅ напишСм Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ трСбуСтся интСрфСйс - ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ сСбя. ΠœΡ‹ ΠΆΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ MouseListener, Π΄Π° ΠΈ Runnable. +****** Π² Ρ‚Π΅ΠΌΡƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… классов ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Ρ‘ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ пСрСчислСниях + Π² самом частом случаС - пСрСчислСния это список ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант. ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² пСрСчислСнии ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ - это ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ статичСскиС Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ поля класса. Π² Π±ΠΎΠ»Π΅Π΅ слоТных случаях пСрСчислСния ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиска ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΈΠ»ΠΈ получСния значСния ΠΈΠ· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° diff --git a/settings/main-style-preamble.tex b/settings/main-style-preamble.tex index 0cc2bab..2be3f4d 100644 --- a/settings/main-style-preamble.tex +++ b/settings/main-style-preamble.tex @@ -17,9 +17,11 @@ \usepackage{nomencl,imakeidx} \usetikzlibrary{mindmap,trees} \usepackage{booktabs}% http://ctan.org/pkg/booktabs -\newcommand{\tabitem}{~~\llap{\textbullet}~~} \usepackage{setspace,fontspec} \usepackage{amsmath} +\usepackage{svg} + +\newcommand{\tabitem}{~~\llap{\textbullet}~~} \spacing{1.15} \babelfont{rm}{IBM Plex Sans} diff --git a/svg-inkscape/jc-01-jvm-struct_svg-tex.pdf b/svg-inkscape/jc-01-jvm-struct_svg-tex.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4a0122398bc7e734eb35bbbd9e367835cfe8338f GIT binary patch literal 1789 zcmY!laBvo!2<-jx8JyXV6zdZ(P;`u=qJX*SMI*Tl{U z1&6g4QZ8s*aHNdoVVz4VH5(m6LVrrfe3CVBZKChetb9E;6X?Y#Zi$8hHMRbG=+M8vdA zuUz>iJ5{JieEHOtDOo3WO0UkmpSpC_!qZ1q&6y**dh?9($VjJl?Inp%gE;SK6}l;= z?5|LW+?yt3H&x5+(Z2T{KW3^=n4<2VyWe*aXXv%iiXi^Or!`%=+k;mez4vUw{3wV|(43MzzxdhVUB&!IoqREI)Bvj?ZVLQx43uD=DNtV z!cq9}Sr&n$zO#4iaxCB9i_kbNbAQdYtW6VN8yH<;)v#1~@kn9jE3>or4t#c&XuYyI z&0+J}iC$byWek}frib6KPRw|?vVH$k*<<(&~*6H|+MediAA#GO(6<`wOn zDl=Yg+v>1!wONo;eQo-=6WKx=jGvijq>B1ZeZ@KB%z15>KNF&uqVE;57o@)pwfDVR zqOvk!=Q8b2i&&m1N~|km_dL1&(1r-Muv)GL!?HH-%+|=S&lB%W>W@y`zJI;3=ZocY zXZ$~-GE?QF|9Pv)Et@i5o;Qk2^j0%JG4JHvm-^}p863D$^HQKGAIJjb8Bj(6(ZH-? zZfXdU2l0&IISQPITq{c4gG+$|VYm0}<8- zbC+9mYfp*#=_$o#pvb4jcDIN5p!DHOlf-)V?9Juvdw$yXd%*?|FO}`3N-ER;x!zFh zWsv7tDXA&3iy^(LuXe5d4(lX=n~LWo^;;R9SI(L08o8vR<+9uAn^Sd<}AWy=K*i{mQGwjVBzn%dz^$#D2>3 z5@vXVdUE3$Fm{j}RB&1hK zEFwU>*JHSUj2Hvul&2AN6lijgDk#VGon}At=$qJefhQq!wUKG zt{cwH8;%;fd)G?~Md*mlyunhxtJG}4iym${ouA(40_OxvB`*%~`<-xX^Xo-l7V4i) z_uZiOlYN_<-bUm8%{p6CWbQ5bE$wsRq5ac88;njaiZGqEC2gHY@!!aB`H-_6r>JcjE#8BAMR$ literal 0 HcmV?d00001 diff --git a/pics/jc-01-jvm-struct.pdf_tex b/svg-inkscape/jc-01-jvm-struct_svg-tex.pdf_tex similarity index 89% rename from pics/jc-01-jvm-struct.pdf_tex rename to svg-inkscape/jc-01-jvm-struct_svg-tex.pdf_tex index cf46189..56f474d 100644 --- a/pics/jc-01-jvm-struct.pdf_tex +++ b/svg-inkscape/jc-01-jvm-struct_svg-tex.pdf_tex @@ -1,6 +1,6 @@ -%% Creator: Inkscape 1.1.2 (b8e25be833, 2022-02-05), www.inkscape.org +%% Creator: Inkscape 1.2.1 (9c6d41e4, 2022-07-14), www.inkscape.org %% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 -%% Accompanies image file 'jc-01-jvm-struct.pdf' (pdf, eps, ps) +%% Accompanies image file 'jc-01-jvm-struct_svg-tex.pdf' (pdf, eps, ps) %% %% To include the image in your LaTeX document, write %% \input{.pdf_tex} @@ -55,18 +55,18 @@ \setlength\tabcolsep{0pt}% \put(0.06748601,0.45022737){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java class file\end{tabular}}}}% \put(0.37724155,0.44898207){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}class loader\end{tabular}}}}% - \put(0.09408583,0.28017812){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}method area\end{tabular}}}}% + \put(0.09818446,0.28096084){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}method area\end{tabular}}}}% \put(0.31952125,0.28128322){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}heap\end{tabular}}}}% \put(0.46891931,0.28216476){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}stack\end{tabular}}}}% - \put(0.61416149,0.28257997){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java threads\end{tabular}}}}% + \put(0.62165019,0.28096084){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java threads\end{tabular}}}}% \put(0.44202528,0.22326478){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}program counter registers\end{tabular}}}}% - \put(0.09198281,0.22045672){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native internal threads\end{tabular}}}}% + \put(0.09818446,0.22009273){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native internal threads\end{tabular}}}}% \put(0.14223833,0.08731507){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}execution engine\end{tabular}}}}% \put(0.04474887,0.03849335){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}JIT compiler\end{tabular}}}}% - \put(0.24633305,0.03931067){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}garbage collector\end{tabular}}}}% + \put(0.25035473,0.03748841){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}garbage collector\end{tabular}}}}% \put(0.55476725,0.07504532){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native method\\interface\end{tabular}}}}% \put(0.79848376,0.07535405){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native method\\library\end{tabular}}}}% \put(0.32477843,0.33543713){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}runtime data area\end{tabular}}}}% - \put(0,0){\includegraphics[width=\unitlength,page=1]{jc-01-jvm-struct.pdf}}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{jc-01-jvm-struct_svg-tex.pdf}}% \end{picture}% \endgroup%