E D R , A S I H C RSS

Java Network Programming

ž‘ •ž: ตœ๊‘‹(woodpage)

etc(?): ๊น€˜˜„(erunc0)


*ฑ…€ •œ ฐ˜ •„ ™”Š”ฐ. 2›”‹ฌ•ˆ— ‚˜จธ€ฅผ ณผˆ˜ žˆ‹ค.
*•˜€งŒ ฌธ„œฅผ ‚จ๊ธฐ„œ ฑ…„ Š”๊ฒŒ •„ง ฑ…‚šฉ„ ™•‹คžˆ ••˜€ •Š€ƒ ž˜“ค‹ค ใ… .ใ… 
*€๊ธˆ€ —ฌ๊ธฐ„œ  ‘Š”๊ฒƒ๊ณ . ˆ„๊ตฐ๊ฐ€ Java Network Programming„ ณธ‹ค ฐธ—ฌ•˜๊ธฐ ฐ”ž€‹ค ^^;;

ฑ…„ ‹ค๊ฐ€ ›ฌ€  œผ„œ Š”๊ฒŒ ข‹‹คŠ” ƒ๊ฐ “ ‹ค.

JAVA Network Programming


Contents

1. PART1 ฐฐ๊ฒฝ€‹
1.1. Chapter1 ”„กœ๊ทธž˜จธ๊ฐ€ •Œ•„••˜Š” „คŠธ›Œฌ˜ ๊ธฐณธ
1.2. Chapter2 žฐ” •ˆ ธ
1.3. Chapter3 ˜ˆ™ฒ˜ฆฌ
1.4. Chapter4 žฐ”กœ ’€–Š” ‹คค‘ “ฐ ˆ”ฉ
2. PART2 ŠคŠธฆผ
2.1. Chapter5 ŠคŠธฆผ„ †Œ๊ฐœ•‹ˆ‹ค
2.2. Chapter6 ŠคŠธฆผ„ ‚ฌšฉ•œ ŒŒผฒ˜ฆฌ ”„กœ๊ทธž˜ฐ˜ ง„ˆ˜
2.3. Chapter7 •„„ฐฅผ šฉ•œ ŠคŠธฆผ ™•žฅ ๊ธฐ•
2.4. Chapter8 APIกœ  œ๊ณต˜Š” ŠคŠธฆผ •„„ฐ
2.5. Chapter9 ฉ”ฆฌ ๊ธฐฐ˜˜ I/O ŠคŠธฆผ
2.6. Chapter10 ฌธž ŠคŠธฆผ„ ‚ฌšฉ•œ ๊ฐœ„ œ I/O ๊ธฐ•
2.7. Chapter11 ฌธž ŠคŠธฆผ •„„ฐ
2.8. Chapter12 ฉ”ฆฌ ๊ธฐฐ˜˜ ฌธž ŠคŠธฆผ
2.9. Chapter13 ŒŒ›Œ—…! ๊ฐ ŠคŠธฆผ
3. PART3 „คŠธ›Œ‚น
3.1. 14žฅ ผ–ธŠธ „คŠธ›Œ‚น
4. žก‹



1. PART1 ฐฐ๊ฒฝ€‹

  • 1žฅ : ”„กœ๊ทธž˜จธ๊ฐ€ •Œ•„••˜Š” „คŠธ›Œฌ˜ ๊ธฐณธ
  • 2žฅ : žฐ” •ˆ ธ
  • 3žฅ : ˜ˆ™ฒ˜ฆฌ
  • 4žฅ : žฐ”กœ ’€–Š” ‹คค‘ “ฐ ˆ”ฉ

1.1. Chapter1 ”„กœ๊ทธž˜จธ๊ฐ€ •Œ•„••˜Š” „คŠธ›Œฌ˜ ๊ธฐณธ

  • „คŠธ›Œฌ๊€•œ ๊ธฐˆ€‹“ค ‚˜˜จ‹ค. (TCP/IP,UDP.“ฑ“ฑ„ †Œ๊ฐœ)

1.2. Chapter2 žฐ” •ˆ ธ

  • žฐ”˜ ‘๊ฐ€€ •ˆ
    • ณธงˆ  „ฑ๊ฒฉ„ „Š” กœšฐ  ˆฒจ •ˆ : „คŠธ›Œฌฅผ †ต•„œ ฝ˜€ง„ ฐ”Šธฝ”“œ˜ ๊ฒฐ„ฑ๊ณผ ๊€ จ งคšฐค‘š”•œ €ถ„๊ธ•˜‚˜ ”„กœ๊ทธž˜จธ๊ฐ€ ง ‘ œผกœ „ธ„ธ•˜๊ฒŒ •Œ•„š”—†Œ
    • ž›๊ณผ ๊€ จœ •ˆ : ž›๊ณผ ๊€ จœ •ˆ€ กœšฐ  ˆฒจ •ˆ‹ค €” ”„กœ๊ทธž˜จธ—๊ฒŒ ง ‘ œผกœ ๊€ จ˜–žˆŒ • ”Œฆฟ„ ผ–ธŠธกœ ‚ฌšฉ• •Œ ” ค‘š”•Š” • ”Œฆฟ •ˆ  œ•— ง ‘ œผกœ —ฐ๊€˜– žˆ๊ธฐ •Œฌธ
    • ๊ทธ™ธ URL”„กœ† ฝœ,IP€‹ฐบŠคŠธ,DNS,ฐฉ™”ฒฝ,HTTP ”„ก‹œ „œฒ„,SOCKS,ฐฉ™”ฒฝ ‚€˜ DNS— ๊€• ๊ฐ„‹จ•œ „ค… ‚˜˜

1.3. Chapter3 ˜ˆ™ฒ˜ฆฌ

  • †ต žฐ”ฑ…—„œ ณผˆ˜žˆŠ”  •„˜ ˜ˆ™ฒ˜ฆฌ— ๊€•œ „ค… ‚˜™€žˆŒ
  • ๊ฐ„‹จ•œ ‚ฌšฉž ˜ˆ™
    ~cpp 
     import java.io.IOException;
    
     public class AuthException extends IOException{  //‚ฌšฉž ˜ˆ™ฅผ  •˜• •Œ  ‹น•œ ˜ˆ™ž˜Šค˜ „œธŒž˜Šค๊ฐ€ ˜Š”๊ฒƒ ค‘š”•œฐ
       public AuthException(){                        //„คŠธ›Œ‚น ฝ”“œ—„œŠ” IOException  ‹น•˜‹ค.
       }                                              //‹น—ฐ•œ –˜๊ธฐ€งŒ IOException„ ฒ˜ฆฌ•˜Š” ‹คฅธ “  ฝ”“œ—„œ ฒ˜ฆฌ ˆ˜žˆ‹ค.
       public AuthException(String detail){
          super(detail);
       }
     }
     

1.4. Chapter4 žฐ”กœ ’€–Š” ‹คค‘ “ฐ ˆ”ฉ

  • ‹คค‘ “ฐ ˆ”ฉ€ žฐ” „คŠธ›Œฌ ”„กœ๊ทธž˜ฐ—„œ งคšฐ ค‘š”•œ €ถ„‹ค. ^^;;
  • ™๊ธฐ™”(Synchronization) : ™๊ธฐ™”ž€ —ฌŸฌ “ฐ ˆ“œ๊ฐ€ ™‹œ— ž‘—…•  –„ ๊ฐ “ฐ ˆ“œ˜ ž‘—… ˆœ„œฅผ  œ–•˜๊ธฐ œ„•œ ฉ”‹ˆฆ˜‹ค.
    • žฐ”—„œ ฝ”“œ˜ Šน • €ถ„„ •œฒˆ— •œ “ฐ ˆ“œงŒ  ‘๊ทผ• ˆ˜ žˆ„ก •ฃผ๊ธฐœ„• synchronized ฌธžฅ„ ‚ฌšฉ
      ~cpp 
        synchronized(anObject){
            //ค‘š”•œ ฝ”“œ“ค
        }
        
    • „ธงˆฌ–(semaphores) : „ธงˆฌ–ž€, žฐ” ๊ฐ๊ฐ€ •„‹ˆผ Šนณ„•œ ˜•ƒœ˜ ‹œŠค…œ ๊ฐฉฐ, ๊ฐŠ” '–๊ธฐ(get)'™€ '†“๊ธฐ(release)'ผŠ” ‘ ๊ฐ€€ ๊ธฐŠฅ„ ๊ฐ€€๊ณ  žˆ‹ค •œ ˆœ๊ฐ„—, ˜คง •˜‚˜˜ “ฐ ˆ“œงŒ „ธงˆฌ–ฅผ –„ ˆ˜ žˆœผฉฐ(get), •œ “ฐ ˆ“œ๊ฐ€ „ธงˆฌ–ฅผ ๊ฐ€€๊ณ  žˆŠ” ™•ˆ „ธงˆฌ–ฅผ –œผ ค๊ณ  ‹œ„•œ ‹คฅธ “ฐ ˆ“œ“ค€ ‘ Œ€๊ธฐ ƒƒœ— “ค–๊ฐ„‹ค. ‹ค‹œ “ฐ ˆ“œ๊ฐ€ „ธงˆฌ–ฅผ †“œผ(release) ‹คฅธ “ฐ ˆ“œ๊ฐ€ „ธงˆฌ–ฅผ –๊ณ (get) ‹ค‹œ Œ€๊ธฐƒƒœกœ “ค–๊ฐ„‹ค. Ÿฐ•œ งค‹ˆฆ˜„ ‚ฌšฉ•˜—ฌ Šน • ž‘—…„ ™๊ธฐ™” • ˆ˜žˆ‹ค.
    • ™๊ธฐ™”˜ šจœจ : Œ€€ถ„˜ ๊ฒฝšฐ ™๊ธฐ™” ž‘—…€ งคšฐ ค‘š”•˜ฉฐ, •ŒกœŠ”  Œ€ ƒžต•„œŠ” •ˆ˜Š” ๊ฒฝšฐ„ žˆ‹ค. ๊ทธŸฌ‚˜ ถˆ•„š”•œ ™๊ธฐ™” ž‘—…€ ”„กœ๊ทธžจ˜ ˆ˜–‰ „ฑŠฅ„ –จ–œจฆฌ๊ณ , žฌ‚ฌšฉ„ฑ„ ๊ฐ†Œ‹œ‚คฉฐ, ”„กœ๊ทธžจ ๊ตฐฉ ƒƒœ— น €๊ฒŒ •  ˆ˜„ žˆ‹ค.
  • Thread ž˜Šค : †ต ƒ†ฐ›•„„œ ‚ฌšฉ
    ~cpp 
     public class SubThread extends Thread{
        public void run(){
              //“ฐ ˆ“œ ž‘—…
        }
        public static void main(String[] args){
           SubThread subThread = new SubThread();
           subThread.start();  //“ฐ ˆ“œ ‹œž‘
        }
     
  • Runnable ธ„ฐŽ˜Šค : Thread ž˜Šคฅผ ง ‘ ƒ†ฐ›€ •Š€ ž˜Šค˜ ๊ฐ๊ฐ€ †‰ฝ๊ฒŒ “ฐ ˆ“œฅผ ƒ„ฑ• ˆ˜ žˆ„ก •คŒ
    ~cpp 
     public class ThreadDemo implements Runnable{
        protected Thread execution;
    
        public synchronized void begin(){ //™๊ธฐ™”
          if(execution == null){
            execution = new Thread(this); //Runnable ธ„ฐŽ˜Šคฅผ ๊ตฌ˜„•œ ๊ฒƒ„ „ฃ–คŒ
            execution.setPriority(Thread.MIN_PRIORITY); //šฐ„ ˆ˜œ„ฅผ  ••จ
            execution.start();            // “ฐ ˆ“œ‹œž‘
          }
        }
    
        public synchronized void end(){ //™๊ธฐ™”
          if(execution !=null){
             execution.interrupt();  //stop()„ “ฐŠ” ๊ฒƒ€ ณ„กœ ฐ”žŒง•˜€ •Š‹ค stop()€ “ฐ ˆ“œ๊ฐ€ ––ค ƒ™— žˆ”ผ„ “ฐ ˆ“œฅผ ฐ”กœ ฉˆถ”– ฒ„ฆฌ๊ธฐ •Œฌธ—,
             execution = null;       //“ฐ ˆ“œ๊ฐ€ ฌฆฌ‹ฐ„น…˜„ ˆ˜–‰•˜Š” „ค‘  ฉ”†Œ“œ๊ฐ€ ˜ธถœ˜Š” ๊ฒฝšฐ,ค‘š”•œ ฐ„ฐ— ‹คฅธ “ฐ ˆ“œ๊ฐ€ ˜˜  ‘๊ทผ• ˆ˜ —†Š”
          }                          //๊ฒฝšฐ๊ฐ€ ƒ๊ธธ ˆ˜„ žˆ‹ค. ”ฐผ„œ stop() ฉ”†Œ“œฅผ ‚ฌšฉ•˜Š” Œ€‹  “ฐ ˆ“œ ž‹ ˜ ข…ฃŒƒƒœฅผ ธ€•˜๊ณ , ˆ˜–‰„ ค‘€•˜Š” ”Œž˜๊ทธ
        }                            //‚ฌšฉ•˜Š” ฐฉ• ”ข‹‹ค. ๊ฐ€žฅ ๊ถŒžฅ˜Š” ฐฉ•€ œ„™€ ๊ฐ™€ ”Œž˜๊ทธ™€ •จ๊˜ interrupt()ฅผ ‚ฌšฉ•˜Š” ๊ฒƒ‹ค.
    
        public void run(){
          try{
              Thread myself = Thread.currentThread(); //˜„žฌ ‹ค–‰ค‘ธ “ฐ ˆ“œฅผ ๊ฐ€ ธ˜จ‹ค.
              while(execution == myself){
                  //“ฐ ˆ“œ ž‘—…
              }
          }finally{
              synchronized(this){
                  execution =null;
              }
          }
        }
        
    • ThreadGroup ž˜Šค : —ฌž˜๊ฐœ˜ “ฐ ˆ“œ ๊ทธฃนœผกœ งŒ“ค– †‰ฝ๊ณ„ Threadฅผ ๊€ฆฌ
    • Thread †ต€(notification)ฉ”†Œ“œ : ฃผ˜•••   €,  ฉ”†Œ“œ“ค ˜ธถœ•˜Š” “ฐ ˆ“ค ฐ˜“œ‹œ synchronized ธ”กœผกœ ™๊ธฐ™” ˜–••œ‹คŠ”  ‹ค.
      • wait() : notify() ฉ”†Œ“œฅผ ˜ธถœ•  •Œ๊นŒ€ ธ”ก‚นœ‹ค.
      • notify() : Œ€๊ธฐ•˜๊ณ  žˆŠ” “ฐ ˆ“œค‘ •˜‚˜ฅผ ๊บ š‹ค.
      • notifyAll() : ฉ”†Œ“œ๊ฐ€ ˜ธถœœ ๊ฐ—„œ Œ€๊ธฐ•˜๊ณ  žˆŠ” “  “ฐ ˆ“œ“ค„ ๊นจš‹ค.
    • šจ๊ณผ ธ ‹คค‘ “ฐ ˆ”ฉ : žฐ”—„œ “ฐ ˆ“œฅผ ƒ„ฑ•˜Š” ๊ฒƒ€ งคšฐ Аฆฐ ž‘—…ฉฐ ผ€ žฐ” ๊ฐ€ƒ จธ‹ € “ฐ ˆ“œ— ๊€ จœ ฉ”ฆฌ ˆ„Šค •Œฌธ— ๊ณ ƒ•˜๊ธฐ„ •œ‹ค. ”ฐผ„œ šจ๊ณผ ธ “ฐ ˆ”ฉ„ œ„•„œŠ” ƒˆกœ “ฐ ˆ“œ ƒ„ฑ•˜Š” ๊ฒƒ ‹ค  „— ƒ„ฑ–ˆ˜ “ฐ ˆ“œ ๊ฐฅผ žฌ‚ฌšฉ•˜Š ๊ฒƒ ข‹‹ค ง„œ ˜•Œ€˜ žฐ” ๊ฐ€ƒ จธ‹ —„œŠ” ‹œŠค…œ  ˆฒจ—„œ Ÿฌ•œ “ฐ ˆ“œ žฌ‚ฌšฉ„ €›•˜๊ธฐ„ •˜€งŒ, ๊ฒฝšฐกฐฐจ„ “ฐ ˆ“œฅผ žฌƒšฉ•˜Š” ฐฉ‹„ ‚ฌšฉ•˜ —ฌŸฌ๊ฐ€€  „ –„ˆ˜ žˆ‹ค. --˜ˆ œŠ” 17žฅฏค—..

2. PART2 ŠคŠธฆผ

  • 5žฅ : ŠคŠธฆผ„ †Œ๊ฐœ•‹ˆ‹ค.
  • 6žฅ : ŠคŠธฆผ„ ‚ฌšฉ•œ ŒŒผ ฒ˜ฆฌ ”„กœ๊ทธžจฐ˜ ง„ˆ˜
  • 7žฅ : •„„ฐฅผ šฉ•œ ŠคŠธฆผ˜ ™•žฅ ๊ธฐ•
  • 8žฅ : APIกœ  œ๊ณต˜Š” ŠคŠธฆผ •„„ฐ
  • 9žฅ : ฉ”ฆฌ ๊ธฐฐ˜˜ I/OŠคŠธฆผ
  • 10žฅ : ฌธž ŠคŠธฆผ„ ‚ฌšฉ•œ ๊ฐœ„ œ I/O๊ธฐ•
  • 11žฅ : ฌธž ŠคŠธฆผ •„„ฐ
  • 12žฅ : ฉ”ฆฌ ๊ธฐฐ˜˜ ฌธž ŠคŠธฆผ
  • 13žฅ : ŒŒ›Œ—…! ๊ฐ ŠคŠธฆผ

2.1. Chapter5 ŠคŠธฆผ„ †Œ๊ฐœ•‹ˆ‹ค

  • ŠคŠธฆผ : „คŠธ›Œฌ ”„กœ๊ทธžจ—„œ •„ฃผค‘š”•œ€ถ„ > š”ฑ… ŠคŠธฆผ—Œ€•„œ ž„ธžˆ‚˜˜จ‹ค.”ฐŠ” Œ€ถฉ „ค…•˜Š”ฐ...;
  • OutpuStream,InputStream : “  ‹คฅธ ŠคŠธฆผ ž˜Šค“ค˜ ˆ˜ผž˜Šค‹ค.  Chapter—„œŠ” ‘˜ ž˜Šค „ค…
    • OutputStream ž˜Šค : OutputStream ž˜ŠคŠ” †ต‹  ฑ„„กœ˜ ๊€ฌธ„ ˜ฏธ•œ‹ค. ฆ‰, OutputStreamœผกœ ฐ„ฐฅผ จ„ฃœผ ฐ„ฐŠ” —ฐ๊ฒฐœ †ต‹  ฑ„„กœ  „†ก  ๊ฒƒ‹ค.
      ~cpp 
        import java.io.*;
      
        public class SimpleOut {    //๊ฐ„‹จ•œ OutputStream ˜ˆ œ
      
          public static void println(String msg) throws IOException{
             synchronized(System.out){ //ฉ”‹œ€ฅผ „ฐฏธ„— ถœ ฅ•˜˜ „ค‘— ‹คฅธ “ฐ ˆ“œ— ˜• String ถœ ฅ ˆ˜ —†„ก ™๊ธฐ™”ฒ˜ฆฌ
                 for(int i=0; i<msg.length(); ++i)
                     System.out.write(msg.charAt(i) & 0xff); //16น„Šธ œ ‹ˆฝ”“œกœ ๊ตฌ„ฑœ String€ —ฐ†•œ ฐ”Šธกœ งคŠค‚น•œ›„ ถœ ฅ
                 System.out.write('\n');   //๊ฐœ–‰ฌธž ถœ ฅ
             }
          System.out.flush();  //ฒ„ผ—  €žฅœ “  ฐค๊ฐ€ ถœ ฅ˜—ˆŒ„ ™•ธ•˜Š” ˜ฏธ—„œ ŠคŠธฆผ„ flush‹œ‚จ‹ค.
          }
      
          public static void main(String[] args) throws IOException {
            for(int i=0; i<args.length;i++){
               println(args[i]);       //„˜๊ฒจฐ›€ ฌธžฅผ •˜‚˜”ฉ „˜๊น€
            }
          }
        }
        
    • InputStream ž˜Šค : InputStream ž˜ŠคŠ” †ต‹  ฑ„„กœ€„ฐ ฐ„ฐฅผ ฝ– ‚Š” ๊€ฌธ„ ˜ฏธ•œ‹ค. OutputStream— ˜• †ต‹  ฑ„„กœ “ฐ—ฌง„ ฐ„ฐŠ” •‹น•˜Š” InputStream— ˜• ฝ˜€ง„‹ค.
      ~cpp 
        import java.io.*;
      
        public class SimpleIn { //๊ฐ„‹จ•œ InputStream ˜ˆ œ
      
           public static void main(String[] args) throws IOException {
              byte[] buffer = new byte[8];     //ž‘€ ฒ„ผฅผ งŒ“ค๊ณ 
              int numberRead;
              while((numberRead =System.in.read(buffer))>=0)   //๊ฐ€Šฅ•œ งŽ€ –‘„ ฝŠ”‹ค. EOF๊ฐ€ -1„ ฐ˜™˜•˜ ถœ ฅ•œ‹ค.
                 System.out.write(buffer,0,numberRead);
          }
        }
        
  • ๊ทธ™’ค—„œ ฐฐšธ ŠคŠธฆผ“ค„ †Œ๊ฐœ•˜๊ณ  žˆ‹ค.

2.2. Chapter6 ŠคŠธฆผ„ ‚ฌšฉ•œ ŒŒผฒ˜ฆฌ ”„กœ๊ทธž˜ฐ˜ ง„ˆ˜

  • žฅ—„œŠ” FileOutputStream๊ณผ FileInputStream— ๊€• ‹คฃจ๊ณ  žˆ‹ค.
    • FileOutputStream๊ณผ FileInputStream€ ŒŒผ— Œ€•œ ฐ”Šธ ๊ธฐฐ˜˜ ŠคŠธฆผ —‘„ธŠคฅผ  œ๊ณต•˜Š” 2๊ฐœ˜ ‘œ€ ž˜Šค‹ค.
  • ™— File,FileDescriptor,RandomAccessFile— ๊€• ๊ฐ„žตžˆ ‚˜˜ค๊ณ  ŒŒผŠคŠธฆผ๊ณผ ๊ฐ™ ‚ฌšฉ•˜Š” ˜ˆ œ๊ฐ€ ‚˜˜จ‹ค.
    • Filež˜Šค : ‹œŠค…œ— …ฆฝ ธ ŒŒผ˜ ฆ„„ ‚˜ƒ€‚๊ณ  ‹ค œ ŒŒผ— ๊€•œ  •ฅผ ๊ฒฐ ••˜Š” ฉ”†Œ“œฟงŒ•„‹ˆผ, ŒŒผ˜ †„ฑ„ ฐ”๊พธŠ” ฉ”†Œ“œ„  œ๊ณต
    • FileDescriptorž˜Šค : FileDescriptor ๊ฐŠ” •˜œ„  ˆฒจ˜ ‹œŠค…œ ŒŒผ „ค…žกœ˜ •“ค‹ค. ŒŒผ „ค…žŠ” — คง„ ŒŒผ„ ˜ฏธ•˜ฉฐ, ฝ๊ธฐ ž‘—…‚˜ “ฐ๊ธฐ ž‘—…„ œ„•œ ˜„žฌ˜ ŒŒผ ‚˜ œ„น˜™€ ๊ฐ™€  •“ค„ ฌ••œ‹ค. RandomAccessFile‚˜ FileOutputStream, FileInputStream„ ‚ฌšฉ•˜€ •Š๊ณ Š” œ šฉ•˜๊ฒŒ FileDescritorฅผ ƒ„ฑ• ˆ˜ žˆŠ” ฐฉ•€ —†‹ค . --;
    • RandomAccessFilež˜Šค : ŒŒผŠคŠธฆผ„ ‚ฌšฉ•˜€•Š๊ณ  ŒŒผ„ ‰ฝ๊ฒŒ ‹คฃฐˆ˜ žˆŒ žฅ € ŒŒผŠคŠธฆผ ž˜ŠคŠ” ˆœฐจ  —‘„ธŠคงŒ ๊ฐ€Šฅ•˜€งŒ ๊ฒƒ€ ž„˜˜ —‘„ธŠค๊ฐ€ ๊ฐ€Šฅ•˜‹ค. —ฌ๊ธฐ„  RandomAccessFilež˜Šคž‘ ŒŒผ ŠคŠธฆผ„ ๊ฐ™ “ฐŠ”ฐ RandomAccessFile˜ žฅ „ ๊ฐ€€๊ณ  „คŠธ›Œฌ—„œ„ ณ„‹คฅธ ˆ˜ •—† ‚ฌšฉ• ˆ˜žˆ‹ค. ˜ˆ œŠ” ฐ‘— --;
  • FileOutputStream ž˜Šค : —ฐ† ธ ฐ„ฐ๊ฐ€ ŒŒผ— “ฐ—ฌงˆˆ˜ žˆ„ก •คŒ
  • FileInputStream ž˜Šค : —ฐ† ธ ฐ„ฐฅผ ฝ„ˆ˜ žˆ๊ฒŒ •คŒ --;
  • ๊ฐ„‹จ•œ ŒŒผ ŠคŠธฆผ ˜ˆ œ
    ~cpp 
     import java.io.*;
    
     public class copy {
       //ฉ”ธ
       public static void main(String[] args) throws IOException {
         if(args.length !=2) //„˜–˜คŠ” args๊ฐ€ ŒŒผ ›ณธ ณต‚ฌณธ ‘๊ฐœ—ฌ••œ‹ค.
           throw ( new IllegalArgumentException ("Syntax:Copy <src> <dst>"));
         FileInputStream in = new  FileInputStream(args[0]); //›ณธ ŒŒผ
         FileOutputStream out = new FileOutputStream(args[1]); //ณต‚ฌณธ ŒŒผ
    
         byte[] buffer = new byte[16];
         int numberRead;
         while((numberRead = in.read(buffer)) >=0) //ŒŒผ„ ฒ„ผ— ๊ฐ€Šฅ•œ งŽ€ –‘„ ฝ๊ณ  ฝ€ –‘งŒผ ŒŒผ— “‹ค. ŒŒผ EOFผ •Œ๊นŒ€.
           out.write(buffer,0,numberRead);  //—ฌ๊ธฐ„œ 0€ ˆ๊ธฐ‹œž‘œ„น˜๊ณ  ŒŒผ— “ธ•Œงˆ‹ค    ˜†œผกœ ™•œ‹ค --;
         out.close();  //close๊ฐ€ ˜ธถœ˜€ •Šœผ FileOutputStream— ๊ฐ€น„€ ฝœ ‰…˜ ผ–‚  •Œ— ŒŒผ๊ณผ •˜€˜ FileDescriptor๊ฐ€ ž™œผกœ ‹ซžŒ‹ค.
         in.close();  //œ„—ž‘ งˆฐฌ๊ฐ€€
       }
     }
     
  • ฎ–“ฐ๊ธฐ(Overwriting)๊ธฐŠฅ„ ๊ฐ–ถ˜ FileOutputStream
    ~cpp 
     import java.io.*;
     public class SimpleOverwritingFileOutputStream extends OutputStream {
    
      protected RandomAccessFile file; //žœค —‘„ธŠค ŒŒผ
    
      public SimpleOverwritingFileOutputStream(String filename) throws IOException {
        file = new RandomAccessFile(filename,"rw"); //RandomAccessFile€ ŒŒผ žฌ•˜€ •Šœผ ž™œผกœ ŒŒผƒ„ฑ •˜๊ณ  ๊ทธ ‡€
                                                    //•Šœผ ŒŒผ„ —ฐ‹ค ŒŒผ„ — ฌธ„ฐŠ” ž™œผกœ ŒŒผ˜ ‹œž‘€ถ„„ ๊ฐ€ฆฌ‚คฏธกœ
                                                    //ฐ„ฐฅผ “ฐ ๊ธฐ˜ ŒŒผ ‚šฉ œ„— ฎ– “ฐ—ฌง„‹ค.
      }
      public void write(int datum) throws IOException {
        /**@todo: implement this java.io.OutputStream abstract method*/
        file.write(datum);
      }
      public void close() throws IOException{
        file.close();
      }
     }
     
  • œ„น˜ ™(Seeking)๊ธฐŠฅ„ ๊ฐ–ถ˜ FileOutputStream
    ~cpp 
     import java.io.*;
     public class SeekableFileOutputStream extends FileOutputStream {
      protected RandomAccessFile file;
    
      public SeekableFileOutputStream(String filename)throws IOException {
        this(new RandomAccessFile(filename,"rw")); // ž‹ ˜ ˜‹คฅธ ƒ„ฑž—๊ฒŒ „˜๊ฒจ€‹ค.--;
      }
      public SeekableFileOutputStream(File file) throws IOException{
        this(file.getPath()); //—ญ‹œ ž‹ ˜ ƒ„ฑžฅผ ˜ธถœ•จ
      }
      protected SeekableFileOutputStream(RandomAccessFile file) throws IOException{
        super(file.getFD());  //FileOutputStream—‹ค๊ฐ€ FileDescriptorฅผ ธžกœ …๊ฒจคŒ
        this.file=file;
      }
      public void setPosition(long position) throws IOException{
        file.seek(position); //position˜ œ„น˜กœ ŒŒผ ฌธ„ฐ œ„น˜ฅผ €๊ฒฝ
      }
      public long getPosition() throws IOException{
        return file.getFilePointer(); //˜„žฌ ŒŒผ ฌธ„ฐ œ„น˜ฅผ Œ คคŒ
      }
      public long getLength() throws IOException{
        return file.length(); //ŒŒผ ๊ธธฅผ Œ คคŒ
      }
      public void write(int b) throws java.io.IOException {
        /**@todo: implement this java.io.OutputStream abstract method*/
        file.write(b);
      }
     }
     
  • ‘œ‹œ/ฆฌ…‹(mark/reset)๊ธฐŠฅ„ ๊ฐ–ถ˜ FileInputStreamงŒ“ค๊ธฐ
    ~cpp 
     import java.io.*;
     public class MarkResetFileInputStream extends FileInputStream {
      protected long markedPosition;  //งˆฌ  œ„€
      protected RandomAccessFile file;  //žœค —‘„ธŠค ŒŒผ
      public MarkResetFileInputStream(String filename)throws IOException {
        this(new RandomAccessFile(filename,"r")); //žœค—‘„ธŠค ŒŒผ„ ƒ„ฑ•„œ ‹คฅธ ƒ„ฑžกœ
      }
      public MarkResetFileInputStream(File file)throws IOException {
        this(file.getPath()); //ŒŒผ…„ „˜๊ฒจฃผ– œ„กœ --;
      }
      protected MarkResetFileInputStream(RandomAccessFile file) throws IOException{
        super(file.getFD());  //FileDescriptorฅผ „˜๊ฒจฃผ๊ณ 
        this.file=file;    //ŒŒผ„  €žฅ•…ผ‹ค. Ÿฌ žœค—‘„ธŠคž‘ FileInputStream ‚ฌšฉ• ˆ˜žˆ‹ค.
        markedPosition = -1;
      }
      public boolean markSupported(){
        return true;
      }
      public void mark(int readAheadLimit){
        try{
          markedPosition = file.getFilePointer(); //˜„žฌœ„น˜ฅผ ๊ธฐ–ต•œ‹ค.
        }catch(IOException ex){
          markedPosition = -1;
        }
      }
      public void reset() throws IOException{
        if(markedPosition == -1)
          throw new IOException("No mark set.");
        file.seek(markedPosition); //งˆฌ•…ผœ„น˜กœ ‹ค‹œ๊ฐ„‹ค.
      }
     }
     

2.3. Chapter7 •„„ฐฅผ šฉ•œ ŠคŠธฆผ ™•žฅ ๊ธฐ•

  • €๊ธˆ๊นŒ€Š” •œ ฐ”Šธ‚˜ ฐ”Šธ ฐฐ— •„˜ ฝ๊ณ /“ฐ๊ธฐฅผ €›•˜Š” ๊ฐ„‹จ•œ ŠคŠธฆผงŒ„ ™€™”‹ค. Ÿฌ•œ ˆ˜€˜ †ต‹ € •„š”ƒœผกœ ฒˆ๊ฑฐกญ‹ค. ๊ทธž˜„œ ฒˆžฅ—„œŠ” ๊ธฐ˜ ŠคŠธฆผ˜ œ„— €๊ฐ€ ธ ๊ธฐŠฅ„  œ๊ณต•  ˆ˜ žˆŠ” ŠคŠธฆผธ ŠคŠธฆผ •„„ฐ(stream filter)— Œ€• †Œ๊ฒŒ•˜๊ณ˜‹ค.
  • FileterOutputStream , FilterInputStream ž˜Šค : ๊ฒƒ€ ž…ถœ ฅ ŠคŠธฆผ •„„ฐ— Œ€•œ …œ”ŒฆฌŠธกœ ฏธ žฌ•˜Š” InputStream,OutputStream— —ฐ๊ฒฐ•„œ š”๊ตฌœ ‚šฉ„ —ฐ๊ฒฐœ ŠคŠธฆผ˜ ฉ”†Œ“œกœ  „Œˆ• ฃผŠ”๊ฒƒ ™˜ ๊ธฐŠฅ€  œ๊ณต•˜€ •ŠŠ”‹ค.
  • ‘œ€ ŠคŠธฆผ •„„ฐ :๊ฐ„žตžˆ ‚Žณธ‹ค.
    • BufferedOutputStream๊ณผ BufferedInputStream : ๊ธฐ˜ ŠคŠธฆผ œ„—„œ ž…ถœ ฅ ฒ„ผง„  œ๊ณต•œ‹ค. ž…ถœ ฅ ˜Š”๊ฒƒ„ ฒ„ผ—  €žฅ•„œ ค‘๊ฐ„ค‘๊ฐ„— flushฅผ šฉ• Ÿ•„‚ธ‹ค. ๊ทธŸฌ ŠคŠธฆผ— Œ€•œ ˜คฒ„—ค“œฅผ ค„ผˆ˜ žˆ‹ค.
  • DataOutputStream๊ณผ DataInputStream : ๊ธฐ˜ ฐ”ŠธงŒ ฝ๊ณ  “ฐŠ” ŠคŠธฆผœ„—„œ ƒœ„ ˆ˜€˜ †ต‹  ๊ฐ€Šฅ•˜‹ค. ˜ˆฅผ “ค– String‚˜ €™  ‹คˆ˜™€ ๊ฐ™€ ๊ฒƒ„ †ต‹ •  ˆ˜žˆ‹ค. ๊ธฐ˜ ˆ˜€‚ฎ€(?) ๊ฒƒ€ ฐ”Šธ ‹จœ„กœ †ต‹ •••œ‹ค.
  • PushbackInputStream : ž… ฅ ŠคŠธฆผœผกœ ฐ„ฐ˜ ฝ๊ธฐ ณต๊ตฌ ๊ธฐŠฅ„ €›•œ‹ค. ‹ค‹œ ง•˜, ฐ„ฐ๊ฐ€ ž… ฅ ŠคŠธฆผœผกœ ‹ค‹œ „ฃ– ธ„œ, ‹คŒ ฒˆ— ฝ๊ธฐฅผ ˆ˜–‰•  •Œ— ‹ค‹œ ฝ˜€งˆ ˆ˜ žˆ๊ฒŒ œ‹ค.
  • SequenceInputStream : ผ จ˜ InputStream“ค ˆœฐจ œผกœ —ฐ๊ฒฐœ‹ค. •˜‚˜˜ SequenceInputStream— —ฌŸฌ InputStream —ฐ๊ฒฐ˜„œ •˜‚˜˜ ๊ธ InputStreamฒ˜Ÿผ ธ‹ค.
  • LineNumberInputStream : LineNumberReader ž˜Šค— ˜• “ธจ๊ฐ€ —†–ง„  ŠคŠธฆผ€ ˆ ธ ˆ˜€œผกœ ค„— ฒˆ˜ธ งค๊ธฐŠ” ๊ธฐŠฅ„  œ๊ณต•œ‹ค.
  • PrintStream : PrintWriter ž˜Šค— ˜• “ธจ๊ฐ€ —†–ง„  ž˜ŠคŠ” ASCII …ŠคŠธ ฐ„ฐ˜ ถœ ฅ๊ธฐŠฅ„  œ๊ณต•œ‹ค.
  • ŠคŠธฆผ •„„ฐ˜ ‚ฌšฉ ˜ˆ œ : System.inœผกœ ž… ฅฐ›Š”๊ฒƒ„ BufferedInputStream•„„ฐฅผ ๊ฑฐณ„œ LineNumberInputStream„ ๊ฑฐฒ˜ DataInputStream„ ๊ฑฐฒ˜„œ DataOutputStream— “ฐ—ฌ€๊ณ  BufferedOutputStreamœผกœ ฒ„ผงผ •œฒˆ— ถœ ฅœ‹ค. --;
    ~cpp 
     import java.io.*;
     public class FilterTest{
      public static void main(String[] args) {
        BufferedInputStream bufferedIn = new  BufferedInputStream(System.in); //žฅน˜ ž… ฅ„ ฒ„ผ •„„ฐกœ ฐ›Š”‹ค.
        BufferedOutputStream bufferedOut = new BufferedOutputStream(System.out); //™”— ถœ ฅ•˜๊ธฐ „ ฒ„ผ•„›ƒ”—ŠคŠธฆผ„ ๊ฑฐนœ‹ค.
        LineNumberInputStream lineNumberIn = new LineNumberInputStream(bufferedIn); //ฒ„ผž… ฅ„ ‹ค‹œ ผธ„ ™—ฌฃผŠ” •„„ฐ๊ฐ€ ฐ›Œ
        DataInputStream dataIn = new DataInputStream(lineNumberIn); //ผธ ™€ ž… ฅ„ DataInputStreamœผกœ ฐ›•„„œ •œฐ”Šธƒ„  „‹ฌ•จ
        DataOutputStream dataOut = new DataOutputStream(bufferedOut); //•œฐ”Šธƒ„ ฐ›Œ
        try{
          String line;
          while(true){
            line = dataIn.readLine();  //•œค„ ž… ฅ„ ฐ›Š”‹ค.
            String response = lineNumberIn.getLineNumber() + " : " + line.toUpperCase() + "\n"; //ค„ฒˆ˜ธฅผ ––„œ ™ž„ Œ€ฌธžกœ ฐ”๊ฟˆ
            dataOut.writeBytes(response); //BufferdOutputStream— “‹ค.
            if(line.equals("exit"))    //exit๊ฐ€ “ค–˜ค ฃจ”„ฅผ‚˜๊ฐ„‹ค.
              break;
          }
          dataOut.flush();         // œ๊นŒ€ ฒ„ผ— •„…ผ๊ฒƒ„ ถœ ฅ•œ‹ค.
        }catch(IOException ex){
          System.err.println(ex);
        }
      }
     }
     

2.4. Chapter8 APIกœ  œ๊ณต˜Š” ŠคŠธฆผ •„„ฐ

  • €๊ธˆ๊นŒ€Š” ŠคŠธฆผ •„„ฐ˜ ๊ฐœ…„ ค‘‹ฌœผกœ ™”๊ณ  ฒˆžฅ—„œŠ” APIกœ  œ๊ณต˜Š” ‡๊ฐ€€ ŠคŠธฆผ— ๊€• ‚Ž๊ณ  ž๊ธฐงŒ˜ •„„ฐฅผ งŒ“ค–ณธ‹ค.
    • DataOutputStream,DataInputStream,BufferedOutputStream,BufferedInputStream,PrintStream,SequenceInputStream,LineNumberInputStream,PushbackInputStream ž˜Šค— ๊€•„œ € ž„ธžˆ „ค…„ •†“๊ณ  žˆ‹ค.
  • •œ 2‹œ๊ฐ„ ณธ๊ฑฐ ๊ฐ™€ฐ งˆ•…žˆ  „๊˜ —†‹ค --; —ˆ ‘ ค‘˜Š”€ถ„ งŽ‹ค. --;

2.5. Chapter9 ฉ”ฆฌ ๊ธฐฐ˜˜ I/O ŠคŠธฆผ

  • ‘๊ฐ€€ ๊ธฐณธ ŠคŠธฆผ— ๊€—„œ „ค…
  • ByteArrayOutputStream
  • ByteArrayInputStream
  • PipedOutputStream
  • PipedInputStream

2.6. Chapter10 ฌธž ŠคŠธฆผ„ ‚ฌšฉ•œ ๊ฐœ„ œ I/O ๊ธฐ•

  • €๊ธˆ๊นŒ€Š” ฐ”Šธ ŠคŠธฆผ„ ฃผกœ Š”ฐ  œ€„ฐŠ” ŠคŠธฆผ˜ –‘Œ€‚ฐงฅธ ฌธž ŠคŠธฆผ— Œ€• •Œ•„ณธ‹ค.
  • Write : ฐ”Šธ ŠคŠธฆผ˜ OutputStream๊ณผ ๊ฐ™€ —ญ• 
  • Reader : ฐ”Šธ ŠคŠธฆผ˜ InputStream๊ณผ ๊ฐ™€ —ญ• 
  • OutputStreamWriter : ฌธž ๊ธฐฐ˜˜ Writer—„œ ฐ”Šธ ๊ธฐฐ˜˜ OutputStream ฑ„„กœ˜ —ฐ๊ฒฐ„ €› ฌธž->OutputstreamWriter->ฐ”Šธ
  • InputStreamReader : ฐ”Šธ ๊ธฐฐ˜˜ InputStream„ ฌธž ŠคŠธฆผ๊ณผ —ฐ๊ฒฐ ฐ”Šธ->InputStreamReader->ฌธž
  • FileWriter : …ŠคŠธ ŒŒผ„ ”Œžซผ˜ ๊ธฐณธ ฌธž ธฝ””ฉ ฐฉ‹„ ‚ฌšฉ•˜—ฌ ถœ ฅ•˜Š” ฌธž ŠคŠธฆผ ธ„ฐŽ˜Šคฅผ  œ๊ณต ŒŒผ— “ฐŠ”๊ฒƒž„ --;
  • FileReader : ”Œžซผ˜ ๊ธฐณธ ฌธž ธฝ””ฉ ฐฉ‹„ ‚ฌšฉ•˜—ฌ …ŠคŠธ ŒŒผ„ ฝ๊ธฐ œ„•œ ฌธž ŠคŠธฆผ ธ„ฐŽ˜Šคฅผ  œ๊ณต•œ‹ค. ŒŒผ—„œ ฝŠ”๊ฒƒž„ --;

2.7. Chapter11 ฌธž ŠคŠธฆผ •„„ฐ

  • ฐ”Šธ ŠคŠธฆผ—„œ ๊ธฐŠฅ„ ™•žฅ•˜๊ธฐœ„•œ •„„ฐ๊ฐ€ žˆ—ˆ“ฏ ฌธž ŠคŠธฆผ—„ •„„ฐ๊ฐ€ žˆ‹ค.
  • FilterWriter : “  ฌธž ŠคŠธฆผ •„„ฐ˜ Šคผž˜Šคกœ ‹คฅธ Writer ๊ฐ— —ฐ๊ฒฐ˜–„œ “  ˜ธถœ —ฐ๊ฒฐœ ŠคŠธฆผœผกœ  „‹ฌ•œ‹ค.
  • FilterReader : “  Reader ฌธž ŠคŠธฆผ •„„ฐ˜ ˆ˜ผž˜Šคกœ, ‹คฅธ Reader๊ฐ™€ —ฐ๊ฒฐ•˜—ฌ “  ฉ”†Œ“œ˜ ˜ธถœ„ —ฐ๊ฒฐœ ŠคŠธฆผœผกœ  „จ•œ‹ค.
  • BufferedWriter : —ฐ๊ฒฐœ ŠคŠธฆผ— ถœ ฅ ฒ„ผง ๊ธฐŠฅ„  œ๊ณต•œ‹ค. “ ฐ„ฐŠ” ฒ„ผ๊ฐ€ ๊ฐ€“ ฐพ๊ฑฐ‚˜ flush() ฉ”†Œ“œ๊ฐ€ ˜ธถœ˜๊ฑฐ‚˜ close() ฉ”†Œ“œ๊ฐ€ ˜ธถœ  •Œ๊นŒ€ ‚€ ฒ„ผ—  €žฅ˜—ˆ‹ค๊ฐ€ —ฌŸฌ ฌธžฅผ •œ๊บผฒˆ— ถœ ฅ•˜Š” write()ฉ”†Œ“œ˜ ˜ธถœ„ †ต• —ฐ๊ฒฐœ ŠคŠธฆผœผกœ ถœ ฅœ‹ค.
  • BufferdReader : —ฐ๊ฒฐœ ŠคŠธฆผ— ž… ฅ ฒ„ผง„  œ๊ณต•˜Š” FilterReader‹ค. ฐ„ฐŠ” ‹คž€ ฉ–ฆฌกœ •œ๊บผฒˆ— —ฐ๊ฒฐœ ŠคŠธฆผ—„œ ‚€ ฒ„ผกœ ฝ˜€€€กœ ž‘€ ฌ๊ธฐ˜ ฐ„ฐŠ” ‚€ ฒ„ผกœ€„ฐ šจœจ œผกœ ฝž ˆ˜ žˆ‹ค.
  • LineNumberReader :—ฐ๊ฒฐœ ŠคŠธฆผ˜ …ŠคŠธฅผ ๊ตฌ„ฑ•˜Š” ๊ฐค„˜ ฒˆ˜ธฅผ šŒ…•˜Š” ๊ธฐŠฅ„ ˆ œผกœ ‚˜งˆ  œ๊ณต•œ‹ค. ž˜ŠคŠ” BufferedReader˜ „œธŒž˜Šค€กœ, —ฐ๊ฒฐœ ŠคŠธฆผœผกœ„œ˜ ฒ„ผง„ ž™œผกœ  œ๊ณต•œ‹ค.
  • PrintWriter : PrintStream„ Œ€•˜Š” Writer ž˜Šคกœ ฐ„ฐฅผ …ŠคŠธ ˜•‹œผกœ ถœ ฅ•˜Š” ฉ”†Œ“œฅผ  œ๊ณต•œ‹ค.
  • PushbackReader : PushbackInputStream๊ณผ งˆฐฌ๊ฐ€€กœ ,‘ธ‹œฐฑ ฒ„ผฅผ  œ๊ณต•˜—ฌ ฏธ ฝ€ ฌธž˜ ณต๊ตฌ๊ธฐŠฅ„  œ๊ณต• ฃผŠ” ž˜Šค‹ค.

2.8. Chapter12 ฉ”ฆฌ ๊ธฐฐ˜˜ ฌธž ŠคŠธฆผ

  • PipedWriter : ŒŒ”„ ž˜ŠคŠ” Šค ˆ“œ †ต‹  ˆ˜‹จธฐ Writer‹ˆ๊น ฌธž๊ธฐฐ˜‹ค. PipedReader™€ —ฐ๊ฒฐ˜„œ •œ—„œ “ฐ๊ณ  ‹คฅธ—„œ ฝŠ”‹ค.
  • PipedReader
  • CharArrayWriter : ž˜ŠคŠ” ฐ”ŠธŠคŠธฆผ˜ ByteArrayOutputStream๊ณผ Œ€‘Œ€Š”๊ฒƒœผกœ Charฐฐ—กœ ฌธžฅผ ‚‚ผˆ˜žˆ‹ค.
  • CharArrayReader
  • StringWriter :  „ฐ˜ œผกœ CharArrayWriter ž˜Šค™€ น„Šท•˜‹ค.
  • StringReader

2.9. Chapter13 ŒŒ›Œ—…! ๊ฐ ŠคŠธฆผ

  • ฒˆžฅ—„œ Objectฅผ †ต‹ ฑ„„กœ  „†ก• ˆ˜žˆŠ” ๊ฐ ŠคŠธฆผ— Œ€• ฐฐšฐ๊ณ žˆ‹ค --;
  • ObjectOutputStream,ObjectInputStream— Œ€• ž„ธžˆ ฐฐšฐŠ”ฐ ๊ฐœ… € ง˜— •ˆ˜จ‹ค.
  • — ˜ˆ œฅผ ๊ณ  กฐ๊ธˆ •๊ฐ€ ๊ฐ€๊ธ•˜Š”ฐ ‹คŒžฅ€„ฐ ณธ๊ฒฉ ธ „คŠธ›œผกœจ •ฅผ •˜๊ฒ ‹ค --;
  • ๊ฐ ŠคŠธฆผ˜ „œธŒž˜Šค ๊ตฌ˜„ : ง ฌ™”  ˆ˜ —†๊ณ , ๊ทธ™—ฌŸฌ๊ฐ€€ ฐฉ•œผกœ„ ง ฌ™”‹œ‚ค๊ธฐ – คš ž˜Šค˜  „†ก„  œ๊ณต•˜๊ธฐ œ„• ๊ฐ ŠคŠธฆผ˜ „œธŒž˜Šคฅผ ๊ตฌ˜••••
    ~cpp 
     interface MyOSContants {
      final short myOSMagick = (short)0x1359;
      final short myOSVersion = (short)0x0010;
     }
    
     import java.io.*;
     import java.net.*;
    
     public class MyDatagramPacket implements Serializable { //ž˜ŠคŠ” ง ฌ™”ฅผ • ˆ˜žˆ‹ค.
       private byte[] data;                                  //ง ฌ™”ฅผ • ˆ˜—†Š” DatagramPacket„ ๊นœ‹ธ„œ ง ฌ™”ฅผ • ˆ˜žˆ๊ฒŒ•œ‹ค.
       private int offset,length,port;
       private InetAddress address;
    
       MyDatagramPacket(DatagramPacket packet) {  //DatagramPacketœผกœ€„ฐ  •ฅผ …๊ฒจฐ›Š”‹ค.
         data = packet.getData();
         offset = packet.getOffset();
         address = packet.getAddress();
         port = packet.getPort();
       }
    
       DatagramPacket toDatagramPacket(){ //DatagramPacket„ „˜๊ฒจ€‹ค.
         return new DatagramPacket(data,offset,length,address,port);
       }
     }
    
     import java.io.*;
     public class MyFile extends File{//ž˜Šค žกœ ง ฌ™”• ˆ˜žˆ€งŒ ˜ˆ œ‹ค --;
       private String originalPath;  //˜คฆฌ€‚  ŒจŠค
    
       public MyFile(File file) {  //ŒŒผ„ ฐ›๊ณ 
         super(file.getAbsolutePath());  // ˆŒ€๊ฒฝกœฅผ „˜๊ฒจ€‹ค/
         originalPath = file.getPath();  //˜คฆฌ€‚  ŒจŠคฅผ ฐ›Š”‹ค.
       }
       public String getOriginalPath(){
         return originalPath;
       }
     }
    
     import java.io.*;
     import java.net.*;
    
     public class MyAltDatagramPacket extends MyDatagramPacket {
    
       public MyAltDatagramPacket(DatagramPacket packet) {
         super(packet);
       }
       private Object readResolve(){
         return toDatagramPacket();
       }
     }
    
     import java.io.*;
     import java.net.*;
     public class MyObjectOutputStream extends ObjectOutputStream implements MyOSContants{
    
       public MyObjectOutputStream(OutputStream out)throws IOException {
         super(out);
         enableReplaceObject(true); //ฉ”†Œ“œฅผ ˜ธถœ••งŒ replaceObjectฅผ ˜ธถœ• ˆ˜žˆŒ •ˆฌธ œ
       }
       protected void writeStreamHeader() throws IOException{
         super.writeStreamHeader(); //ˆ˜ผž˜Šค˜ —ค”ฅผ ถœ ฅ•œ›„—
         writeShort(myOSMagick);  //ŠคŠธฆผ˜ ฉ”ง„˜ฒ„ธ myOSMagick๊ณผ
         writeShort(myOSVersion); //ฒ„ „ ฒˆ˜ธธ myOSVersion„ ถœ ฅ•œ‹ค.
       }
       protected Object replaceObject(Object object) throws IOException{
         if(object.getClass() == DatagramPacket.class)
           return new MyDatagramPacket((DatagramPacket)object);
         else if(object.getClass().getName().equals("java.io.File"))
           return new MyFile((File)object);
         else
           return object;
       }
     }
    
     import java.io.*;
     import java.net.*;
    
     public class MyObjectInputStream extends ObjectInputStream implements MyOSContants {
    
       public MyObjectInputStream(InputStream in)throws IOException {
         super(in);
         enableResolveObject(true); //resolveObject()˜ธถœ ๊ฐ€Šฅ•˜๊ฒŒ•œ‹ค.
       }
       protected void readStreamHeader() throws IOException{ //ŠคŠธฆผ„ ฝŠ”‹ค.
         super.readStreamHeader();
         if(readShort() !=myOSMagick)              //๊ณ œ ฒˆ˜ธ๊ฐ€ ‹€ฆฌ
           throw new StreamCorruptedException("Incompatible myOSMagick number");
         if(readShort() > myOSVersion)            //ฒ„ „ †’œผ
           throw new StreamCorruptedException("Incompatible myOSVersion number");
       }
       protected Object resolveObject(Object object) throws IOException{
         if(object instanceof MyDatagramPacket)
           return ((MyDatagramPacket)object).toDatagramPacket();
        else
           return object;
       }
     }
     
  • PART2ฅผ งˆน˜ฉฐ : ๊ทธ™•ˆ žฐ”ฑ…„ „œ •œฒˆ„ ๊นŠ  ‘•€•œ ŠคŠธฆผ—๊€• ฐฐ› ‹ค. žฌฐŒ—ˆ‹ค ^^;;

3. PART3 „คŠธ›Œ‚น

  • 14žฅ : ผ–ธŠธ „คŠธ›Œ‚น
  • 15žฅ : ผ–ธŠธ ”„กœ๊ทธž˜ฐ ‹ค „ ˜ˆ œ
  • 16žฅ : „œฒ„ „คŠธ›Œ‚น
  • 17žฅ : ›น „œฒ„ ”„กœ๊ทธž˜ฐ
  • 18žฅ : ™„ฒฝ ๊ตฌ˜„! ผ–ธŠธ/„œฒ„ ธ„ฐ„ท • ”Œฆฌ€…˜
  • 19žฅ : URL ž˜Šค˜ ™œšฉ
  • 20žฅ : ฐ„ฐ๊ทธžจ „คŠธ›Œ‚น
  • 21žฅ : ฐ„ฐ๊ทธžจ • ”Œฆฌ€…˜ ‹ค „ ˜ˆ œ
  • 22žฅ : €‹ฐบŠคŠธ „คŠธ›Œ‚น

3.1. 14žฅ ผ–ธŠธ „คŠธ›Œ‚น



4. žก‹


˜˜„ core java ‹คณผ•Œ ๊นŒ€ ๊ธฐ‘˜ คผ. ‹คŒฃผ๊นŒ€ ‹ค ฃผงˆ.. ผˆผˆผˆ.. + ๊ทธฆฌ๊ณ , Java Network ‹ˆ๊ฐ€ „ธฏธ‚˜ •ค˜.. •„‹ˆ 1Œ€1 ๊ฐ•˜..?? บฌบฌ

‘‹ ˆ จน๊ณ  “ฐ ค‹ˆ๊น ž˜•ˆจง„‹ค --;

‘‹ ŠคŠธฆผ €ถ„€ ๊ทธ๊ธฐ๊ฐ„— „˜ †€•˜‹ค. €ฆฌ‹ˆ “ฐ๊ธฐ ž˜“ค‹ค. --; ƒˆกญ๊ฒŒ „คŠธ›€„ฐ ..
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:30
Processing time 0.0614 sec