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ºÎ ÀúÀÚ:ÃÖ¿µ°ü |