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.0710 sec