¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ  Á¦9Àå ÀÚ¹Ù½ºÆ®¸²  9.3.2 InputStream OutputStream  

 

9.3.2 InputStream, OutputStream

 

 InputStream & OutputStream Ŭ·¡½º´Â IOÆÐŰÁö Áß¿¡¼­µµ °¡Àå ±âº»ÀÌ µÇ´Â Ŭ·¡½ºµéÀÔ´Ï´Ù. ¸ðµç IO °ü·Ã ¿¹Á¦¿¡ 50% Á¤µµ´Â µîÀåÇÑ´Ù°í º¸¼Åµµ ÁÁÀ» °ÍÀÔ´Ï´Ù. ±×¸¸Å­ Áß¿äÇÏ°í ±âº»ÀûÀΠŬ·¡½ºÀÔ´Ï´Ù. ¿¹Á¦¸¦ º¸°í ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù.

 

InputOutputStreamTest.java (InputStream, OutputStreamÀ» Å×½ºÆ®ÇÑ ¿¹Á¦)

import java.io.*;

class InputOutputStreamTest {

   public static void main(String args[]) throws IOException {

       System.out.println("¾Æ¹« ±ÛÀ̳ª ÀÔ·ÂÇϽðí Enter¸¦ ÃÄÁÖ¼¼¿ä");

       System.out.println(" 'S'¸¦ ÀÔ·ÂÇϸé ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù.");

       int ch;

       InputStream in = System.in;

       OutputStream out = System.out;

       while((ch=in.read()) != -1) {

          if(ch == 'S') {

             byte[] arr= new byte[4];

             arr[0] = 83;

             arr[1] = 84;

             arr[2] = 79;

             arr[3] = 80;

             out.write(arr);

             out.flush();

             out.close();

             in.close();

             System.exit(-1);

          }

          System.out.println("Char: "+(char)ch+", Available: "+in.available());

       }

   }

}

C:\JavaExample\09>javac InputOutputStreamTest.java

C:\JavaExample\09>java InputOutputStreamTest

¾Æ¹« ±ÛÀ̳ª ÀÔ·ÂÇϽðí Enter ¸¦ ÃÄ ÁÖ¼¼¿ä

 'S'¸¦ ÀÔ·ÂÇϸé ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù.

java

Char: j, Available: 5

Char: a, Available: 4

Char: v, Available: 3

Char: a, Available: 2

, Available: 1

Char:

, Available: 0

S

STOP

 

 À§ÀÇ ¿¹Á¦´Â °¡Àå ±âº»ÀûÀÎ InputStream & OutputStreamÀ» °¡Áö°í ÀԷ°ú Ãâ·ÂÀ» ÇØº» °ÍÀÔ´Ï´Ù.

 

¼Ò½º¸¦ º¸¸é ¿ì¼±, Űº¸µå·ÎºÎÅÍ ÀԷ¹ÞÀº °ªÀ» Àоî¿À´Â InputStreamÀÇ °´Ã¼ inÀ» »ý¼ºÇÕ´Ï´Ù. java.lang.Object ÆÐŰÁö¿¡ ¼ÓÇØÀÖ´Â SystemŬ·¡½ºÀÇ ¸â¹ö ÇʵåÀÎ inÀº Ç¥ÁØ ÀÔ·Â ½ºÆ®¸²ÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÌ ½ºÆ®¸²Àº È£½ºÆ® ȯ°æ ¶Ç´Â »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ Å°º¸µå ÀÔ·Â ¶Ç´Â ¶Ç´Ù¸¥ ÀÔ·Â ¼Ò½º¿¡ ´ëÀÀÇÕ´Ï´Ù.

 

n        InputStream in = System.in;

 

OutputStream°´Ã¼ outÀ» »ý¼ºÇÕ´Ï´Ù. ¿ª½Ã SystemŬ·¡½ºÀÇ ¸â¹ö ÇʵåÀÎ outÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ outÀº in¿¡ ´ëºñµÇ´Â Ç¥ÁØ Ãâ·Â ½ºÆ®¸²ÀÔ´Ï´Ù.

 

n        OutputStream out = System.out;

 

»ý¼ºµÈ °´Ã¼ inÀ» »ç¿ëÇÏ¿© InputStreamÀÇ ¸â¹ö¸Þ¼­µåÀÎ read()¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ¹ÙÀÌÆ®¸¦ ÀÐ¾î µéÀÔ´Ï´Ù.

 

n        while((ch=in.read()) != -1) { }

 

read()¸Þ¼­µå´Â ¹ÙÀÌÆ®°ªÀ» Àоîµé¿© intÇüÀÇ Á¤¼ö°ªÀ¸·Î º¯È¯½ÃÄÑ ¹Ýȯ½ÃŰ´Â ¸Þ¼­µåÀÔ´Ï´Ù. ÀоîµéÀÌ´Â °ªÀÌ ¾øÀ» ¶§´Â -1À» ¹ÝȯÇÕ´Ï´Ù. read()¸Þ¼­µå´Â while¹®°ú °°ÀÌ »ç¿ëÇÏ¿© ¹ÙÀÌÆ®°¡ °è¼Ó ÀԷµǴÂÁö, ÀÔ·ÂÀÌ ³¡³µ´ÂÁö¸¦ ÆÄ¾ÇÇÕ´Ï´Ù. ±×¸®°í ÀÐ¾î µéÀÎ ¹ÙÀÌÆ® °ª°ú ºñ±³¸¦ ÇÏ¿©, ¡®S¡¯°¡ ÀÖ´Ù¸é ÇÁ·Î±×·¥Àº ¹ÙÀÌÆ® ¹è¿­À» »ý¼ºÇϰí, ÀÌ ¹è¿­À» Ãâ·Â½Ãŵ´Ï´Ù. ¿©±â¼­´Â ¡®S¡¯, ¡¯T¡¯, ¡¯O¡¯, ¡¯P¡¯¸¦ ¹è¿­·Î ÀÔ·ÂÇϰí ÀÖ½À´Ï´Ù. ¹ÙÀÌÆ® ¹è¿­À» write()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© OutputStream¿¡ ¹è¿­°ªÀ» ±â·ÏÇÕ´Ï´Ù. ±×·± ÈÄ¿¡ flush()¸Þ¼­µå¸¦ ÀÌ¿ë, OutputStream¿¡ ÀÖ´Â ¡°STOP¡±¶ó´Â ±ÛÀ» µµ½º ÄܼÖâ¿¡ Ãâ·ÂÇϰí close()¸Þ¼­µå·Î StreamÀ» ´Ý½À´Ï´Ù. ±×¸®°í³ª¼­ ¡®System.exit(-1);¡¯·Î ÇÁ·Î±×·¥Àº ÀÚµ¿À¸·Î Á¾·á°¡ µË´Ï´Ù. exit()¸Þ¼­µå´Â ÇöÀç ½ÇÇàÇϰí ÀÖ´Â ÀÚ¹Ù°¡»ó¸Ó½Å(JVM)À» Á¾·áÇØÁÝ´Ï´Ù. Á»´õ Áö¼¼È÷ ¾Ë°í ½ÍÀ¸½Ã´Ù¸é API(java.lang.SystemÆÐŰÁö)¸¦ ÂüÁ¶Çϼ¼¿ä.

 

n        if(ch == 'S') {

n           byte[] arr= new byte[4];

n           arr[0] = 83;

n           arr[1] = 84;

n           arr[2] = 79;

n           arr[3] = 80;

n           out.write(arr);

n           out.flush();

n           out.close();

n           in.close();

n           System.exit(-1);

n        }

 

 

¢Ñ flush()

OutputStreamÀÇ ¸â¹ö¸Þ¼­µå·Î È£ÃâµÇ¸é Buffer¿¡ ÀÖ´Â ³»¿ëÀ» °­Á¦·Î ºñ¿ì°Ô ÇØ¼­ Ãâ·Â½ÃŲ´Ù.

 

 À§ÀÇ out.write(cha); ¶ó´Â ±¸¹®Àº ÀÐ¾î µéÀÎ ¹ÙÀÌÆ® ¹è¿­À» ½ºÆ®¸²¿¡ ±â·ÏÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ±×·± ÈÄ out.flush(); ¶ó´Â ±¸¹®À» »ç¿ëÇÏ¿© ±â·ÏµÈ ½ºÆ®¸²À» µµ½ºÃ¢(¸í·É ÇÁ·ÒÇÁÆ´)¿¡ Ãâ·ÂÇÏ°Ô µË´Ï´Ù. ÀԷ°ªµé Áß¿¡ ¡®S¡¯°¡ ¾ø´Ù¸é ¸ðµç ÀÔ·ÂµÈ °ªÀ» charÇüÀ¸·Î º¯È¯ÇÏ¿© Ãâ·ÂÀ» Çϰí, available()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© ½ÇÇàÀ» Áß´ÜÇÏÁö ¾Ê°í ÀÔ·Â ½ºÆ®¸²¿¡¼­ ÀÐÀ» ¼ö ÀÖ´Â byteÀÇ ¼ö¸¦ ±× ¿·¿¡¼­ Ãâ·ÂÇÕ´Ï´Ù.

 

ÀÚ! ±×·³ Ãâ·ÂµÈ °á°ú¸¦ »ìÆìº¸°Ú½À´Ï´Ù. ¸ÕÀú ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ¸é ¾Æ¹« ±ÛÀ̳ª ÀÔ·ÂÇ϶ó°í Çß½À´Ï´Ù. Àú´Â ¡®java¡¯¸¦ ÀÔ·ÂÇϰí Enter¸¦ ÃÆ½À´Ï´Ù. ±× °á°ú, ¡®Char: j, Available: 5¡¯°¡ ù ÁÙ¿¡ Ãâ·ÂµÇ°í ÀÖ½À´Ï´Ù. ¿ì¸®°¡ ÀÔ·ÂÇÑ °ÍÀº ¡®java¡¯¶ó´Â ±Û ³×°³¿Í EnterŰ 1°³¸¦ Æ÷ÇÔ, ¸ðµÎ 5°¡Áö¸¦ ÀÔ·ÂÇÏ¿´ÁÒ. ±×·¡¼­ Available¿¡ 5¶ó°í ³ª¿À´Â °ÍÀÔ´Ï´Ù. Available°ªÀÌ 4°¡ ¾Æ´Ï¶ó ¿Ö 5³Ä°í¿ä? ±×°ÍÀº Àá½ÃÈÄ¿¡ ¾Ë·Áµå¸®ÁÒ. ¡®, Available: 1¡¯´Â Enter۸¦ ¶æÇÏ´Â °ÍÀ̱¸¿ä. ±× ´ÙÀ½¿¡ ³ª¿Â ¡®, Available: 0¡¯Àº ÀоîµéÀÌ´Â µ¥ÀÌÅͰ¡ ¾ø´Â °æ¿ì ¹öÆÛ°¡ ¸ðµç µ¥ÀÌÅ͸¦ ´Ùº¸³Â´Ù´Â Ç¥½Ã¸¦ °¨ÁöÇÑ °ÍÀÔ´Ï´Ù. ÀÌ °ªÀº Ç¥½Ã°¡ ¾ÈµÇÁÒ. ±×¸®°í ¹öÆÛ¿¡¼­ ´õ ÀÌ»ó ÀÐ¾î µéÀÏ °ÍÀÌ ¾øÀ¸´Ï±î Available°ªÀº 0ÀÌ ³ª¿Â °ÍÀ̱¸¿ä. ±×·¡¼­ ¾Æ±î jÀÇ Available°ªÀÌ 5ÀÎ °ÍÀÔ´Ï´Ù. µÎ¹øÂ°·Î ´ë¹®ÀÚ ¡¯S¡¯¸¦ ÀÔ·ÂÇϸé, À§¿¡¼­ ¸»¾¸µå¸° ´ë·Î  ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¾î Á¾·á°¡ µÇ´Â °ÍÀÔ´Ï´Ù.

 

°£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À¸·Î InputStream°ú OutputStreamÀ» »ç¿ëÇÏ¿© Űº¸µå¿¡¼­ °ªÀ» ÀÔ·Â ¹Þ°í, ±× °ªÀ» ºñ±³ÇÏ´Â ¹ý°ú Ãâ·ÂÇÏ´Â ¹ýÀ» ¾Ë¾Æº¸¾Ò½À´Ï´Ù. Àç¹ÌÀÖÀ¸¼Ì³ª¿ä?

I

ÀÌ·¸°Ô InputStream°ú OutputStreamÀº java.ioÆÐŰÁö¿¡¼­ °¡Àå Áß¿äÇÏ´Ù°í ¸»Çصµ Ʋ·È´Ù°í ¸»Çϱ⠾î·Á¿ï Á¤µµ·Î ÀÚÁÖ »ç¿ëµÇ¸ç Áß¿äÇÑ Å¬·¡½ºÀÔ´Ï´Ù. ¸î¹ø º¸°í ¿ÏÀüÈ÷ ÀÌÇØÇϱâ´Â ¾î·Á¿î Ŭ·¡½ºÀÌ´Ï ±×Àú ÀÚÁÖ º¸°í »ç¿ë¹ýÀ» ÀÍÈ÷´Â °ÍÀÌ °¡Àå ÁÁÀ» µí ½Í½À´Ï´Ù.

 

InputStream ÁÖ¿ä ¸â¹ö¸Þ¼­µå

public int available() : ½ÇÇàÀ» Áß´ÜÇÏÁö ¾Ê°í ÀÔ·Â ½ºÆ®¸²¿¡¼­ ÀÐÀ» ¼ö ÀÖ´Â ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù.

public void close() : ÀÔ·Â ½ºÆ®¸²À» ´Ý°í ½ºÆ®¸²°ú ¿¬°üµÈ ¸ðµç ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù.

public void mark(int readlimit) : ÀÔ·Â ½ºÆ®¸²ÀÇ ÇöÀç À§Ä¡¸¦ Ç¥½ÃÇÕ´Ï´Ù.

public boolean markSupported() : ÀÔ·Â ½ºÆ®¸²ÀÌ mark ¹× reset ¸Þ¼­µå¸¦ Áö¿øÇÏ´ÂÁö ¿©ºÎ¸¦ Å×½ºÆ®ÇÕ´Ï´Ù.

public abstract  int read() : ÀÔ·Â ½ºÆ®¸²¿¡¼­ µ¥ÀÌÅÍÀÇ ´ÙÀ½ ¹ÙÀÌÆ®¸¦ ÀнÀ´Ï´Ù.

public int read(byte[] b) : ÃÖ´ë b.length ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ÀÔ·Â ½ºÆ®¸²¿¡¼­ ¹ÙÀÌÆ®ÀÇ ¹è¿­·Î ÀÐ¾î µéÀÔ´Ï´Ù.

public int read(byte[] b, int off, int len) : ÃÖ´ë len ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ÀÔ·Â ½ºÆ®¸²¿¡¼­ ¹ÙÀÌÆ®ÀÇ ¹è¿­·Î ÀÐ¾î µéÀÔ´Ï´Ù.

public void reset() : ÀÔ·Â ½ºÆ®¸²¿¡¼­ ¸¶Áö¸·À¸·Î mark ¸Þ¼­µå°¡ È£ÃâµÇ¾úÀ» ¶§ÀÇ À§Ä¡·Î ½ºÆ®¸² À§Ä¡¸¦ ÀçÁöÁ¤ÇÕ´Ï´Ù.

public long skip(long n) : ÀÔ·Â ½ºÆ®¸²¿¡¼­ n ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ °Ç³Ê¶Ú ÈÄ ¹ö¸³´Ï´Ù.

 

OutputStream ÁÖ¿ä ¸â¹ö¸Þ¼­µå

public void close() : Ãâ·Â ½ºÆ®¸²À» ´Ý°í ½ºÆ®¸²°ú ¿¬°üµÈ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù.

public void flush() : Ãâ·Â ½ºÆ®¸²À» ³»º¸³»°í °­Á¦·Î ¹öÆÛµÈ Ãâ·Â ¹ÙÀÌÆ®°¡ ±â·ÏµÇ°Ô ÇÕ´Ï´Ù.

public void write(byte[] b) : ÁöÁ¤µÈ ¹ÙÀÌÆ® ¹è¿­¿¡¼­ b.length ¹ÙÀÌÆ®¸¦ Ãâ·Â ½ºÆ®¸²¿¡ ±â·ÏÇÕ´Ï´Ù.

public void write(byte[] b, int off, int len) : len°³ÀÇ ¹ÙÀÌÆ®¸¦ ¿ÀÇÁ¼Â off¿¡¼­ ½ÃÀÛÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® ¹è¿­¿¡¼­ Ãâ·Â ½ºÆ®¸²¿¡ ±â·ÏÇÕ´Ï´Ù.

public abstract  void write(int b) : ÁöÁ¤µÈ ¹ÙÀÌÆ®¸¦ Ãâ·Â ½ºÆ®¸²¿¡ ±â·ÏÇÕ´Ï´Ù.

 



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ
ÀúÀÚ:ÃÖ¿µ°ü