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