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