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