//: io/Fi1eLocking.java import java.nio.channels.*; import java.util.concurrent.*; import java.io.*;
public class FileLocking {
public static void main(String[] args) throws Exception {
FileOutputStream fos= new FileOutputStreamCfile txt");
FileLock fl = fos.getChannel Π .tryLockO.
if(fl != null) {
System.out.println("Π€Π°ΠΉΠ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½"); Ti meUnit.MILLISECONDS.sieep(100); fl .releaseO;
System ΠΎΠΈ^ΡΠ³Π¨1ΠΏ("ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ½ΡΡΠ°"),
}
fos.closeO;
}
} /* Output; Π€Π°ΠΉΠ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ½ΡΡΠ° *///:-
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ FileLock, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅, Π²ΡΠ·ΡΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ tryLock() ΠΈΠ»ΠΈ lock() ΠΊΠ»Π°ΡΡΠ° FileChannel. (Π‘Π΅ΡΠ΅Π²ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ Socket-Channel, DatagramChannel ΠΈ ServerSocketChannel Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΡΠ΄ Π»ΠΈ ΡΠΎΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π²ΡΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ.) ΠΠ΅ΡΠΎΠ΄ tryLock() Π½Π΅ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ½ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ²Π»Π°Π΄Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π΅ΠΌΡ ΡΡΠΎ Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ (Π΅ΡΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ» Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ), ΡΠΎ ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΠ΅ΡΠΎΠ΄ lockQ ΠΆΠ΄Π΅Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½, Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΡΠ²Π°Π½, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ ΠΊΠ°Π½Π°Π», Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ lock(). ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ FileChannel. release().
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π° Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
tryLockdong position, long size, boolean shared) ΠΈΠ»ΠΈ
lockdong position, long size, boolean shared)
ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°ΡΡΠΎΠΊ ΡΠ°ΠΉΠ»Π° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ size ΠΎΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ position. Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ.
ΠΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΡΠΏΠΎΡΠ°Π±Π»ΠΈΠ²Π°ΡΡΡΡ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΡΠ°ΠΉΠ»Π°, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ°ΡΡΠΊΠΎΠ² Π½Π΅ Π°Π΄Π°ΠΏΡΠΈΡΡΡΡΡΡ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ»Π° Π½Π°Π»ΠΎΠΆΠ΅Π½Π° Π½Π° ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ position Π΄ΠΎ position + size, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°ΠΉΠ» ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΡΡ ΠΈ ΡΡΠ°Π» Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° position + size, ΡΠΎ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ position + size Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ. ΠΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±Π»ΠΎΠΊΠΈΡΡΡΡ ΡΠ°ΠΉΠ» ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠ°ΡΡΠ΅Ρ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΌ ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ. Π’ΠΈΠΏ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΈΠ»ΠΈ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½Π°Ρ) ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° FileLock.isShared().
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ². ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°ΠΊΠΈΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ΅Π½ Π΄Π»Ρ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π°:
//: io/LockingMappedFiles.java
// ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
// {RunByHand}
import java.nio *,
import java nio channels *,
import java io *, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
public class LockingMappedFiles {
static final int LENGTH = Ox8FFFFFF; // 128 MB static FileChannel fc;
public static void main(String[] args) throws Exception { fc =
new RandomAccessFileC'test.dat", "rw").getChannel0; MappedByteBuffer out =
fc.map(Fi1eChannel.MapMode.READ_WRITE, 0. LENGTH); for(int i = 0; i < LENGTH; i++)
out.put((byte)'x'); new LockAndModify(out. 0, 0 + LENGTH/3); new LockAndModify(out, LENGTH/2, LENGTH/2 + LENGTH/4);
}
private static class LockAndModify extends Thread { private ByteBuffer buff; private int start, end;
LockAndModify(ByteBuffer mbb. int start, int end) { this.start = start; this.end = end; mbb.limit(end); mbb.position(start); buff = mbb.sliceO; startO;
}
public void runΠ { try {
// ΠΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΠΈΡ;
FileLock fl = fc.lock(start, end, false);
System.out.println("ΠΠ°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΎ: "+ start +" to "+ end);
// ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ:
while(buff.position() < buff.limitO - 1) buff.put((byte)(buff.get Π + 1)); fl.releasee);
System.out.println("ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΎ: "+start+" to "+ end); } catch(IOException e) {
throw new RuntimeException(e);
}
}
}
} ///:-
ΠΠ»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠ° LockAndModify ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π±ΡΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΅Π³ΠΎ Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ slice(). Π ΠΌΠ΅ΡΠΎΠ΄Π΅ run() Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° (Π²Ρ Π½Π΅ Π²ΠΏΡΠ°Π²Π΅ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ Π±ΡΡΠ΅ΡΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠ°Π½Π°Π»Π°). ΠΡΠ·ΠΎΠ² lock() Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, Ρ Π²Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠ°Ρ Β«ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡΒ» Ρ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ°ΠΉΠ»Π°.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ½ΠΈΠΌΠ°ΡΡΡΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ JVM, Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ releaseQ ΠΎΠ±ΡΠ΅ΠΊΡΠ° FileLock, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ.
Π‘ΠΆΠ°ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Java ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»Π°ΡΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ Π² ΡΠΆΠ°ΡΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ (ΡΠ°Π±Π». 16.8). ΠΠ½ΠΈ Π±Π°Π·ΠΈΡΡΡΡΡ Π½Π° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°.
ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Reader ΠΈ Writer, ΠΎΠ½ΠΈ Π½Π°Π΄ΡΡΡΠΎΠ΅Π½Ρ Π½Π°Π΄ Π±Π°ΠΉΡ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ InputStream ΠΈ OutputStream, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΆΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, Π° Ρ Π±Π°ΠΉΡΠ°ΠΌΠΈ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π½ΠΈΠΊΡΠΎ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ. (ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΈΠ· Π±Π°ΠΉΡΠΎΠ²ΡΡ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ InputStreamReader ΠΈ OutputStreamWriter.)
Π’Π°Π±Π»ΠΈΡΠ° 16.8. ΠΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
CheckedlnputStream
CheckedOutputStream
DeflaterOutputStream ZipOutputStream
GZIPOutputStream
InflaterlnputStream ZipInputStream
GZIPInputStream
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°
ΠΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ getCheckSum() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° InputStream (Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ) ΠΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ getCheckSum() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° OutputStream (Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΆΠ°ΡΠΈΡ) ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ΄ΠΊΠ»Π°ΡΡ DeflaterOutputStream, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠΆΠ°ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ZIP
ΠΠΎΠ΄ΠΊΠ»Π°ΡΡ DeflaterOutputStream, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠΆΠ°ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² GZIP
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠΆΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ΄ΠΊΠ»Π°ΡΡ InflaterlnputStream, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΆΠ°ΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅,
Ρ ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ZIP
ΠΠΎΠ΄ΠΊΠ»Π°ΡΡ InflaterlnputStream, ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡΠΈΠΉ ΡΠΆΠ°ΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Ρ ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² GZIP
Π₯ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π΅Π»ΠΈΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΡΠΌΠ°ΡΡ ZIP ΠΈ GZIP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠΆΠ°ΡΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ².
ΠΡΠΎΡΡΠΎΠ΅ ΡΠΆΠ°ΡΠΈΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ GZIP
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ GZIP ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠΈΡΡΠ°ΡΠΈΠΉ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΏΠ»ΠΎΡΠ½ΠΈΡΡ (Π° Π½Π΅ ΡΠ°Π·ΡΠΎΠ·Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ ). Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΆΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ°ΠΉΠ»:
// io/GZIPcompress java // {ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ- GZIPcompress.java} import java util zip *, import java io *.
public class GZIPcompress {
public static void main(String[] args)
throws IOException { ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
if(args.length == 0) {
System out.printlnC
"ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅: \nGZIPcompress file\n" + "ΠΈΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ GZIP Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ " + "ΡΠ°ΠΉΠ»Π° Π² Π°ΡΡ ΠΈΠ² test.gz"); System.exit(l),
}
BufferedReader in = new BufferedReader( new FileReader(args[0])),
BufferedOutputStream out = new BufferedOutputStrearrK new GZIPOutputStreamC
new FileOutputStreamC'test gz"))),
System.out.println("3anncb ΡΠ°ΠΉΠ»Π°");
int Ρ;
while((c = in.readO) != -1) out.write(c);
in.closeO;
out.closeO;
System.out.printlnC"Π§ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°");
BufferedReader in2 = new BufferedReader(
new InputStreamReader(new GZIPInputStreamC new FilelnputStreamC'test gz")))).
String s;
while((s = in2 readLineO) != null) System.out.printin(s);
}
} ///:-
Π Π°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: Π²Ρ ΠΏΡΠΎΡΡΠΎ Π½Π°Π΄ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΠ΅ ΠΈΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ (GZIPOutputStream ΠΈΠ»ΠΈ ZipOutputStream Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ, GZIPInputStream ΠΈΠ»ΠΈ ZipInputStream Π΄Π»Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ). ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΌΠ΅ΡΠ°Π½Π½ΡΠ΅ Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ: ΠΏΠΎΡΠΎΠΊ in ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Reader, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° GZIPOutputStream ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ OutputStream, Π½ΠΎ Π½Π΅ Writer. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΡΠΎΠΊ GZIPInputStream ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Reader.
ΠΠ½ΠΎΠ³ΠΎΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ ZIP
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ°Ρ ΡΠΎΡΠΌΠ°Ρ ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ZIP, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², Π° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ZIP Π΄Π°ΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ. Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ZIP-ΡΠΎΡΠΌΠ°Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΆΠ°ΡΡΠ΅ Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΡΠΌ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠΎΠΌ. Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ, Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Checksum Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ. Π’Π°ΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌ Π² Java Π΄Π²Π°: ΠΎΠ΄ΠΈΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΡΠΠ΅Π³32'(ΡΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΡΡΡΡΠ΅Π΅), Π° Π΄ΡΡΠ³ΠΎΠΉ β ΠΊΠ»Π°ΡΡΠΎΠΌ CRC32 (ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ ΡΠΎΡΠ½Π΅Π΅).
//: io/ZipCompress.java
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° ZIP Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ
// ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
// {ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ZipCompress java}
import java.util zip *;
import java io *;
import java.util *,
import static net mindview.util Print *,
public class ZipCompress {
public static void mainCString[] args) throws IOException {
FileOutputStream f = new FileOutputStreamC'test zip"). CheckedOutputStream csum =
new CheckedOutputStream(f. new Adler320). ZipOutputStream zos = new ZipOutputStream(csum). BufferedOutputStream out =
new BufferedOutputStream(zos). zos setComment("ΠΡΠΎΠ²Π΅ΡΠΊΠ° ZIP-ΡΠΆΠ°ΡΠΈΡ Java"). // ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ // getCommentO Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ for(String arg . args) {
print("3anncb ΡΠ°ΠΉΠ»Π° " + arg). BufferedReader in =