Android > Android - ½ºÆ®¸²(stream) - ¹ÙÀÌÆ® Stream µî·ÏÀÏ : 2017-07-05 11:01 Á¶È¸¼ö : 53,559º¸Åë ½Ã½ºÅÛÀº ¿©·¯°¡Áö ÀÔÃâ·Â ÀåÄ¡¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
¿¹Àü¿¡´Â ÀÌ·± ÀÔÃâ·Â ÀåÄ¡¸¦ ´Ù·ê¶§ Àü¿ëÇÔ¼öµéÀÌ Á¸ÀçÇß½À´Ï´Ù. Àü¿ëÇÔ¼ö°¡ Á¸ÀçÇÑ´Ù´Â ¶æÀº ¾î¶² ÀÔÃâ·ÂÀ» »ç¿ëÇÒ¶§ ¾î¶² µ¥ÀÌÅÍ Çü½ÄÀ» »ç¿ëÇÒ°ÍÀÎÁö°¡ ÀÌ¹Ì Á¤ÇØÁ®ÀÖ´Ù´Â ¶æÀ̱⵵ ÇÕ´Ï´Ù. ¿¹¸¦µé¾î, Å°º¸µå·Î Å°¸¦ ÀԷ¹޴ °æ¿ì, getch ¿Í °°Àº ÄܼÖÇÔ¼ö¸¦ »ç¿ëÇß°í ÀÌ ÇÔ¼ö´Â 4¹ÙÀÌÆ® Á¤¼öÇü µ¥ÀÌÅÍ °ªÀ» ¹ÝȯÇÏ¿© ÇÁ·Î±×·¡¸Ó´Â ÀÌ°ªÀ» ¹Þ¾Æ¼ ¿øÇÏ´Â Çü½ÄÀ¸·Î °¡°øÇÏ¿© ó¸®Çß½À´Ï´Ù. ÀÌ·¸µí ½Ã½ºÅÛÀÇ ´Ù¾çÇÑ ÀÔÃâ·ÂÀ» »ç¿ëÇϱâ À§Çؼ´Â °¢°¢ÀÇ ÀÔÃâ·Â Àü¿ëÇÔ¼ö¿¡ ´ëÇؼ ¾Ë°í ÀÖ¾î¾ßÇÏ¸ç °íÀ¯ÇÑ Æ¯¼ºÀ̳ª µ¥ÀÌÅÍ Çü½Äµµ ÇÁ·Î±×·¡¸Ó°¡ ÀÌÇظ¦ ÇؾßÁö¸¸ ±×°ÍÀ» »ç¿ëÇÒ¼ö ÀÖ´Â ÇüÅ¿´°í ÀÌ·¯ÇÑ ¹æ½ÄÀº ÀÔÃâ·Â ÇÁ·Î±×·¡¹ÖÀ» Èûµé°Ô ÇÏ´Â ¿ä¼Ò¿´½À´Ï´Ù. °´Ã¼ÁöÇâ ±â¼úÀÌ ¹ßÀüÇÏ¸é¼ ÀÌ·± ÀÔÃâ·Â¿¡ ´ëÇÑ Ç¥ÁØÀûÀÎ ¹æ¾ÈÀ» ¸ð»öÇÏ´ø Áß¿¡ ¸ðµç ÀÔÃâ·ÂÀÇ ±â¹ÝÀÌ µÉ¼ö ÀÖ´Â ±â¼ú·Î¼ "½ºÆ®¸²(stream)" À̶ó´Â °³³äÀÌ ¸¸µé¾îÁ³½À´Ï´Ù. Áï, ½ºÆ®¸²Àº ±¸Ã¼Àû µ¥ÀÌÅÍ Çü½ÄÀÌ Á¤ÇØÁöÁö ¾ÊÀº µ¥ÀÌÅÍÀÇ ÀÔÃâ·Â È帧À» ÀǹÌÇϴ°ÍÀÔ´Ï´Ù. ½ºÆ®¸²Àº Ç¥ÁØÀûÀÎ ÀÔÃâ·Â Çü½ÄÀ» Á¦°øÇÏ´Â ±¸Á¶·Î µÇ¾î ÀÖ°í, ±¸Ã¼Àû ÀåÄ¡¿¡ ´ëÇÑ ÀÔÃâ·Â ±â´ÉµéÀº ±âº» ½ºÆ®¸² ±¸Á¶¸¦ È®ÀåÇؼ ºñ¾î ÀÖ´Â °¢ ¸Þ¼Òµåµé¿¡ ³»¿ëÀ» ä¿ö³Ö¾î ±â´ÉÀ» ¿Ï¼ºÇÑ ÈÄ, ÇØ´ç ÀåÄ¡¸¦ »ç¿ëÇÒ¼ö ÀÖµµ·Ï Á¦°øµË´Ï´Ù. ÀÌ·¸°Ô µÇ¸é ÇÁ·Î±×·¡¸Ó´Â ÇØ´ç ÀåÄ¡¿¡ ´ëÇÑ ¿©·¯°¡Áö »çÀüÁö½Ä ¾øÀÌ ±âº» ½ºÆ®¸²ÀÇ Çü½Ä¸¸ ÀÌÇØÇÏ°í ÀÖ´Ù¸é ¾ó¸¶µçÁö ÇØ´ç ÀåÄ¡ÀÇ ÀÔÃâ·ÂÀ» »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù. °á·ÐÀûÀ¸·Î ½Ã½ºÅÛÀ» Á¦°øÇÏ´Â Ãø¿¡¼´Â ¸ðµç ÀÔÃâ·ÂÀ» ½ºÆ®¸²À» ±â¹ÝÀ¸·Î ¼³°èÇؼ ÅëÀϼºÀ» À¯ÁöÇÒ¼ö ÀÖ°í ÇØ´ç ½Ã½ºÅÛÀÇ ÀÔÃâ·ÂÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Ó´Â ½ºÆ®¸²ÀÇ °³³ä¸¸ °øºÎÇؼ ´Ù¾çÇÑ ÀåÄ¡ÀÇ ÀÔÃâ·ÂÀ» ½±°Ô »ç¿ëÇÒ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. "½ºÆ®¸²Àº ÀÔÃâ·Â ¹æ½ÄÀÇ Ç¥ÁØÀûÀÌ°í, ÀÏ¿øÈµÈ °ü¸® ÇüŸ¦ ¸»ÇÏ´Â °ÍÀÔ´Ï´Ù." ÀÚ¹ÙÀÇ ½ºÆ®¸²±¸Á¶´Â ±âº»ÀûÀ¸·Î "¹ÙÀÌÆ® ½ºÆ®¸²" °ú "¹®ÀÚ ½ºÆ®¸²" À¸·Î ³ª´©¾îÁö¸ç ÈçÈ÷, ¹ÙÀ̳ʸ®¶ó°í ºÒ¸®´Â ÀÏ¹Ý µ¥ÀÌÅ͵éÀº ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î ó¸®ÇÏ°í ¹®ÀÚ ¶Ç´Â ¹®ÀÚ¿À» ±â¹ÝÀ¸·Î ÇÏ´Â µ¥ÀÌÅ͵éÀº ¹®ÀÚ ½ºÆ®¸²À¸·Î ó¸®ÇÕ´Ï´Ù. ½ºÆ®¸²¿¡ ´ëÇÑ ³»¿ëÀÌ Á» ¸¹¾Æ¼ ÀÌ °Á¿¡¼´Â ¹ÙÀÌÆ® ½ºÆ®¸²¿¡ ´ëÇؼ¸¸ ¸ÕÀú ¼³¸íÇÒ°ÍÀÌ°í ¹ÙÀÌÆ® ½ºÆ®¸² Ŭ·¡½ºµé Áß¿¡¼ ²À ¾Ë¾Æ¾ßÇÒ Å¬·¡½ºµé¿¡ ´ëÇؼ¸¸ ¾ð±ÞÇÒ °ÍÀÔ´Ï´Ù. 1. ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ ±âº» Çü½Ä ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ ÃÖ»óÀ§ Ŭ·¡½º´Â InputStream °ú OutputStream ÀÔ´Ï´Ù. ÀÌ µÎ Ŭ·¡½º´Â »ó¼ÓÀ» ÅëÇÏ¿© ¿ëµµ¿Í ¸ñÀû¿¡ µû¶ó ¿©·¯°¡Áö ÇÏÀ§ Ŭ·¡½º¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡ÀÇ ±×¸²Àº java.io ÆÐÅ°Áö ¾È¿¡ Á¸ÀçÇÏ´Â ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ Á¾·ù¸¦ °èÃþµµ·Î ±¸¼ºÇÑ °ÍÀÔ´Ï´Ù. À§ ±×¸²ÀÇ ½ºÆ®¸² Ŭ·¡½ºµéÀº java.io ÆÐÅ°Áö¿¡¼ Á¦°øÇÏ´Â ±âº»ÀûÀΠŬ·¡½ºµéÀ̹ǷΠƯº°ÇÑ ¿ëµµ·Î ½ºÆ®¸²À» »ç¿ëÇÏ´Â °æ¿ì ´Ù¸¥ ÆÐÅ°Áö¸¦ Ãß°¡ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ÆÄÀÏÀ» ´Ù·ç°Å³ª ³×Æ®¿öÅ©¸¦ »ç¿ëÇϰųª ¿©·¯°¡Áö ÀÔÃâ·Â ÀåÄ¡¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ½ºÆ®¸²À» Á¢ÇϰԵ˴ϴÙ. ±× ¶§ ¸ðµç ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ ÃÖ»óÀ§ Ŭ·¡½ºÀÎ InputStream °ú OutputStream À» Àß ¾Ë¾ÆµÎ¸é ±× ÇÏÀ§ Ŭ·¡½ºµéÀ» »ç¿ëÇϴµ¥ ´õ¿í ½¬¿öÁö°í, Àß ÀÌÇØÇÏ¸é¼ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. InputStream °ú OutputStream Ŭ·¡½º¿¡ ´ëÇؼ´Â ¾Ë¾ÆµÎ¸é ÁÁ°ÚÁö¸¸ ±× ÇÏÀ§ Ŭ·¡½º´Â Á¾·ùµµ ¸¹À» »Ó´õ·¯ ±× »ç¿ë¹ýÀÌ ÃÖ»óÀ§ Ŭ·¡½ºµé°ú Å©°Ô ´Ù¸£Áö ¾Ê±â ¶§¹®¿¡ Áö±Ý ´Ù ¾Ë¾ÆµÑ ÇÊ¿ä´Â ¾øÀ¸¸ç ÇÊ¿ä½Ã ±×¶§±×¶§ ÀÍÇô¼ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ´ÙÀ½Àº InputStream °ú OutputStream Ŭ·¡½º¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. 2. InputStream - ¸Þ¼Òµå InputStream ¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²ÀÇ ÃÖ»óÀ§ Ŭ·¡½º·Î Ãß»ó ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ´Â Ãß»ó Ŭ·¡½ºÀ̱⠶§¹®¿¡ ¹Ýµå½Ã ÇÏÀ§ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º°¡ °®´Â ¸Þ¼Òµå´Â ´ÙÀ½°ú °°½À´Ï´Ù. int available() throws IOException; ÀÔ·Â ½ºÆ®¸²À¸·Î ÀÐÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù. InputStream Ŭ·¡½ºÀÇ available ¸Þ¼Òµå´Â ÇÏÀ§ Ŭ·¡½º¿¡¼ ¹Ýµå½Ã ÀçÁ¤ÀǸ¦ ÇØÁÖ¾î¾ßÇϸç ÀçÁ¤ÀǸ¦ ÇÏÁö¾Ê°í, »ç¿ëÇÒ °æ¿ì ¹Ýȯ °ªÀº 0ÀÌ µË´Ï´Ù. void close() throws IOException; ÀÔ·Â ½ºÆ®¸²À» ´Ý°í ÀÌ ½ºÆ®¸²¿¡ °ü·ÃµÈ ½Ã½ºÅÛ ¸®¼Ò½º¸¦ ¹ÝȯÇÕ´Ï´Ù. ±×·¯³ª ÇÏÀ§ Ŭ·¡½º°¡ ¾Æ´Ñ InputStream Ŭ·¡½ºÀÇ close ¸Þ¼Òµå´Â ¾Æ¹« Àϵµ ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. void mark(int readlimit); ÀÔ·Â ½Ã½ºÅÛ¿¡¼ ÇöÀç À§Ä¡ÇÏ´Â °÷À» ÀúÀåÇØ µÓ´Ï´Ù. ÀÔ·Â ½ºÆ®¸²Àº µ¥ÀÌÅÍ ¹ÙÀÌÆ®¸¦ Çѹø ÀÐÀ¸¸é ¹Ù·Î ´ÙÀ½ ¹ÙÀÌÆ®¸¦ ÀÐ°Ô µÇ±â ¶§¹®¿¡ ÀÌÀü µ¥ÀÌÅ͸¦ ´Ù½Ã ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù. ±×·¯³ª mark ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é ¸Þ¼Òµå¸¦ È£ÃâÇÑ ½ÃÁ¡ºÎÅÍ ÀÐÇôÁö´Â µ¥ÀÌÅÍ°¡ º°µµ·Î ÀúÀåµÇ±â ¶§¹®¿¡ µ¥ÀÌÅ͸¦ Àдٰ¡ ´Ù½Ã ÀúÀåµÈ À§Ä¡ÀÇ µ¥ÀÌÅ͸¦ ÀÐ°í ½ÍÀ» ¶§ reset ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ÇØ´ç À§Ä¡ÀÇ µ¥ÀÌÅ͸¦ ´Ù½Ã ÀÐÀ» ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. readlimit ¸Å°³ ÀÎÀÚ´Â ÇöÀç À§Ä¡ºÎÅÍ µ¥ÀÌÅ͸¦ ÀúÀåÇØµÑ ÃÖ´ë Å©±â¸¦ ¸»Çϸç ÇöÀç ³²Àº µ¥ÀÌÅÍÀÇ Å©±âº¸´Ù Å« ¼ö°¡ ÁöÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù. ¸¸¾à reset À» È£ÃâÇϱâ Àü¿¡ ÀÔ·Â ½ºÆ®¸²ÀÌ ÀÐÀº µ¥ÀÌÅÍÀÇ Å©±â°¡ readlimit º¸´Ù Ä¿Áö¸é ´õ ÀÌ»ó ÀÐÀº µ¥ÀÌÅ͸¦ ÀúÀåÇصÎÁö ¾Ê½À´Ï´Ù. markSupported ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ÇöÀç ½ºÆ®¸² Ŭ·¡½º°¡ mark ±â´ÉÀ» Áö¿øÇÏ´ÂÁö ¿©ºÎ¸¦¾Ë ¼ö ÀÖÀ¸¸ç InputStream Ŭ·¡½ºÀÇ °æ¿ì mark ¸Þ¼Òµå´Â ¾Æ¹« Àϵµ ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. void reset() throws IOException; °¡Àå ÃÖ±Ù¿¡ mark ¸Þ¼Òµå°¡ È£ÃâµÇ¾ú´ø À§Ä¡·Î ½ºÆ®¸²ÀÇ À§Ä¡¸¦ Àç¼³Á¤ÇÕ´Ï´Ù. markSupported ¸Þ¼Òµå°¡ true ¸¦ ¹ÝȯÇÏ´Â °æ¿ì¿¡ reset ¸Þ¼Òµå¸¦ È£ÃâÇϸé Á¤»óÀûÀÎ °æ¿ì º°µµ·Î ÀúÀåÇصРmark ¸Þ¼Òµå¸¦ È£ÃâÇÑ ½ÃÁ¡ºÎÅÍÀÇ µ¥ÀÌÅ͸¦ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª Çѹøµµ mark ¸Þ¼Òµå°¡ È£ÃâµÇÁö ¾Ê¾Ò°Å³ª, mark ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§ ÁöÁ¤ÇÑ ÀúÀåÇØµÑ ¹ÙÀÌÆ® Å©±âº¸´Ù Áö±Ý±îÁö ÀÐÀº ¹ÙÀÌÆ® Å©±â°¡ Ä¿Áö¸é IOException ÀÌ ¹ß»ýÇÕ´Ï´Ù. ¹Ý´ë·Î markSupported ¸Þ¼Òµå°¡ false ¸¦ ¹ÝȯÇÏ´Â °æ¿ì¿¡ reset ¸Þ¼Òµå¸¦ È£ÃâÇϸé IOException ÀÌ ¹ß»ýÇÒ °ÍÀÔ´Ï´Ù. InputStream Ŭ·¡½ºÀÇ °æ¿ì reset ¸Þ¼Òµå¸¦ È£ÃâÇϸé IOException ÀÌ ¹ß»ýÇÕ´Ï´Ù. boolean markSupported(); ÀÔ·Â ½ºÆ®¸²ÀÌ mark ¿Í reset ¸Þ¼Òµå¸¦ Áö¿øÇÏ´ÂÁö Å×½ºÆ®ÇÕ´Ï´Ù. µÎ ¸Þ¼ÒµåÀÇ Áö¿ø ¿©ºÎ´Â °¢ ½ºÆ®¸² °´Ã¼¸¶´Ù ´Þ¶óÁö¸ç InputStream Ŭ·¡½º °´Ã¼ÀÇ °æ¿ì ÀÌ ¸Þ¼Òµå¸¦ È£ÃâÇϸé false ¸¦ ¹ÝȯÇÕ´Ï´Ù. abstract int read() throws IOException; ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ ÇϳªÀÇ µ¥ÀÌÅÍ ¹ÙÀÌÆ®¸¦ ÀнÀ´Ï´Ù. ¹ÙÀÌÆ® µ¥ÀÌÅÍÀÇ °ªÀº 0 ~ 255 ¹üÀ§¸¦ °®À¸¸ç ÇÔ¼öÀÇ ¹Ýȯ°ªÀ¸·Î ¸®Åϵ˴ϴÙ. ¸¸¾à ÀÐÀ» µ¥ÀÌÅÍ°¡ ¾ø´Â °æ¿ì -1 À» ¹ÝȯÇÏ°í, ´õ ÀÌ»ó ÀÐÀ» µ¥ÀÌÅÍ°¡ ¾ø´Â °æ¿ì, ÀÐÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍ°¡ »ý±â°Å³ª ½ºÆ®¸²ÀÇ ³¡À» ¹ß°ßÇϰųª ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§±îÁö ´ë±â»óÅ°¡ µË´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â ¹Ýµå½Ã ÇÏÀ§ Ŭ·¡½º¿¡¼ ±¸ÇöÇÏ¿© »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. int read(byte[] b) throws IOException; ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÀÐ¾î¼ ¸Å°³ ÀÎÀÚ·Î ³Ñ¾î¿Â b ¹è¿¿¡ ÀúÀåÇÕ´Ï´Ù. ´õ ÀÌ»ó ÀÐÀ» µ¥ÀÌÅÍ°¡ ¾ø´Â °æ¿ì, ÀÐÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍ°¡ »ý±â°Å³ª ½ºÆ®¸²ÀÇ ³¡À» ¹ß°ßÇϰųª ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§±îÁö ´ë±â»óÅ°¡ µË´Ï´Ù. ¸¸¾à b°¡ null À̸é NullPointerException ¿¹¿Ü°¡ ¹ß»ýÇÏ¸ç ´õ ÀÌ»ó ÀÐÀ» µ¥ÀÌÅÍ°¡ ¾ø´Â °æ¿ì -1ÀÌ ¹ÝȯµÇ°í, ¸¸¾à ù¹ø° ¹ÙÀÌÆ®°¡ ½ºÆ®¸²ÀÇ ³¡À̰ųª ½ºÆ®¸²ÀÌ close µÇ°Å³ª ±âŸ ¿©·¯°¡Áö ÀÌÀ¯·Î ÀÐÀ» ¼ö ¾øÀ¸¸é IOException ¿¹¿Ü°¡ ¹ß»ýÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå·Î ÀÐÀ» µ¥ÀÌÅÍ´Â byte ¹è¿ÀÇ ±æÀÌÀ̸ç ÀÐÀº µ¥ÀÌÅÍÀÇ ±æÀÌ´Â ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀÌ µÇ¸ç ÀÌ ¸Þ¼Òµå´Â read(b, 0, b.length) ¿Í µ¿ÀÏÇÑ °á°ú¸¦ °¡Á®¿É´Ï´Ù. int read(byte[] b, int off, int len) throws IOException; ÁöÁ¤ÇÑ °³¼ö¸¸Å µ¥ÀÌÅÍ ¹ÙÀÌÆ®¸¦ Àаí byte ¹è¿ÀÇ ÁöÁ¤ÇÑ À§Ä¡¿¡¼ºÎÅÍ µ¥ÀÌÅ͸¦ ÀúÀåÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ ¹Ýȯ °ªÀ̳ª ¿¹¿Ü »óȲÀº read(byte[] b) ¸Þ¼Òµå¿Í µ¿ÀÏÇÏÁö¸¸ ³»ºÎÀûÀ¸·Î´Â read() ¸Þ¼Òµå¸¦ ¹Ýº¹ÀûÀ¸·Î È£ÃâÇÏ¿© µ¥ÀÌÅ͸¦ ÀнÀ´Ï´Ù. long skip(long n) throws IOException; ÀÔ·Â ½ºÆ®¸²¿¡¼ ¸Å°³ ÀÎÀÚ¸¸ÅÀÇ µ¥ÀÌÅ͸¦ °Ç³Ê ¶Ý´Ï´Ù. ¸Å°³ ÀÎÀÚ¿¡ 0 À̳ª À½¼ö°¡ ³Ñ¾î¿Ã °æ¿ì ÀÌ ¸Þ¼Òµå´Â ¼öÇàµÇÁö ¾ÊÀ¸¸ç ÀÌ ¸Þ¼Òµå°¡ ¼öÇàµÇ¸é byte ¹è¿ÀÌ »ý¼ºµÇ¸é¼ ÇØ´ç ¹è¿¿¡ µ¥ÀÌÅ͸¦ ÀоîµéÀÌ°Ô µË´Ï´Ù. 3. OutputStream - ¸Þ¼Òµå OutputStream ¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸²ÀÇ ÃÖ»óÀ§ Ŭ·¡½º·Î Ãß»ó ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ´Â Ãß»ó Ŭ·¡½ºÀ̱⠶§¹®¿¡ ¹Ýµå½Ã ÇÏÀ§ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º°¡ °®´Â ¸Þ¼Òµå´Â ´ÙÀ½°ú °°½À´Ï´Ù. public void close() throws IOException; Ãâ·Â ½ºÆ®¸²À» ´Ý°í ÀÌ ½ºÆ®¸²¿¡ °ü·ÃµÈ ½Ã½ºÅÛ ¸®¼Ò½º¸¦ ¹ÝȯÇÕ´Ï´Ù. Çѹø ´ÝÇôÁø ½ºÆ®¸²Àº ´Ù½Ã ¿°Å³ª ½ÇÇà½Ãų ¼ö ¾øÀ¸¹Ç·Î ´Ù½Ã ½ºÆ®¸²À» »ý¼ºÇÏ¿© »ç¿ëÇؾßÇÕ´Ï´Ù. OutputStream Ŭ·¡½º¿¡¼´Â ¾Æ¹« Àϵµ ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. public void flush() throws IOException; ½ºÆ®¸² ¹öÆÛ¿¡ ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ °Á¦ÀûÀ¸·Î Ãâ·Â½Ãŵ´Ï´Ù. ±âº»ÀûÀÎ Ãâ·Â ½ºÆ®¸²Àº ¹öÆÛ¿¡ µ¥ÀÌÅÍ°¡ °¡µæ Â÷¸é ±×¶§ µ¥ÀÌÅ͸¦ Ãâ·Â½ÃÅ°´Âµ¥ ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇϸé ÀúÀåµÈ µ¥ÀÌÅÍÀÇ Å©±â¿¡¿¡ °ü°è¾øÀÌ ¹Ù·Î Ãâ·ÂµË´Ï´Ù. OutputStream Ŭ·¡½º¿¡¼´Â ¾Æ¹«Àϵµ ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. abstract void write(int b) throws IOException; Ãâ·Â ½ºÆ®¸²À¸·Î µ¥ÀÌÅ͸¦ ½á¼ ¸Å°³ ÀÎÀÚ·Î ³Ñ¾î¿Â µ¥ÀÌÅ͸¦ Ãâ·ÂÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå·Î Ãâ·ÂµÇ´Â µ¥ÀÌÅÍ´Â 1¹ÙÀÌÆ®À̱⠶§¹®¿¡ ÇÏÀ§ 8ºñÆ®¸¸ À¯È¿ÇÏ°Ô ÀÛ¿ëÇÏ¸ç »óÀ§ 24ºñÆ®´Â ¹«½ÃµË´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â Ãß»ó ¸Þ¼ÒµåÀ̱⠶§¹®¿¡ OutputStream ÀÇ ÇÏÀ§ Ŭ·¡½º´Â ¹Ýµå½Ã ÀÌ ¸Þ¼Òµå¸¦ Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. public void write(byte[] b) throws IOException; Ãâ·Â ½ºÆ®¸²À¸·Î ÁöÁ¤µÈ byte ¹è¿¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ ¹è¿ÀÇ ±æÀ̸¸Å Ãâ·Â½Ãŵ´Ï´Ù. À̸޼ҵå´Â write(b, 0, b.length()) ¿Í µ¿ÀÏÇÑ È¿°ú¸¦ °¡Áý´Ï´Ù. public void write(byte[] b, int off, int len) throws IOException; Ãâ·Â ½ºÆ®¸²À¸·Î byte ¹è¿ÀÇ ÁöÁ¤ÇÑ À§Ä¡¿¡¼ºÎÅÍ ÁöÁ¤ÇÑ °³¼ö¸¸Å µ¥ÀÌÅ͸¦ Ãâ·Â½Ãŵ´Ï´Ù. OutputStream Ŭ·¡½ºÀÇ °æ¿ì ÀÌ ¸Þ¼Òµå°¡ ½ÇÇàµÇ¸é ¹è¿ÀÇ °¢ ¹ÙÀÌÆ®¸¶´Ù Ãâ·ÂÀÌ ¹ß»ýÇϱ⠶§¹®¿¡ ÇÏÀ§ Ŭ·¡½º¸¦ »ý¼ºÇÏ´Â °æ¿ì È¿À²ÀûÀ¸·Î À籸ÇöÇØ¾ß ÇÕ´Ï´Ù. ¸¸¾à byte ¹è¿ÀÌ null ÀÎ °æ¿ì NullPointerException ÀÌ ¹ß»ýÇÏ°í, off ³ª len ÀÌ À½¼öÀ̰ųª off ¿Í lenÀÇ ÇÕÀÌ len º¸´Ù Å« °æ¿ì IndexOutOfBoundsException ÀÌ ¹ß»ýÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±âº» ÀÔÃâ·Â ½ºÆ®¸²Àº ¿©·¯°¡Áö ¸ñÀû°ú Ư¼º¿¡ µû¶ó »ó¼ÓÀ» ÅëÇÏ¿© ¿©·¯°¡Áö ÇüÅ·ΠȮÀåµÉ ¼ö ÀÖÀ¸¸ç ±âº» ¸Þ¼Òµå¸¦ ÀçÁ¤ÀÇÇϰųª, »õ·Î¿î ¸Þ¼Òµå¸¦ Ãß°¡ÇÏ¸é¼ ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. 4. ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ Á¾·ù À§ÀÇ Å¬·¡½º °èÃþµµ¿¡ ÀÖ´Â InputStream °ú OutputStream Ŭ·¡½ºÀÇ ÇÏÀ§ Ŭ·¡½º´Â ´ÙÀ½°ú °°Àº Ư¡À» °¡Áö°í ÀÖ½À´Ï´Ù. 2.1 InputStream Ŭ·¡½ºÀÇ ÇÏÀ§ Ŭ·¡½º Á¾·ù - ByteArrayInputStream ½ºÆ®¸²À¸·ÎºÎÅÍ ÀÐÀº µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ¹öÆÛ¸¦ °¡Áø ½ºÆ®¸²ÀÔ´Ï´Ù. Ŭ·¡½ºÀÇ ³»ºÎ¿¡´Â Ä«¿îÅÍ°¡ º°µµ·Î Á¸ÀçÇϴµ¥ ÀÌ°ÍÀº ´ÙÀ½ ¹ÙÀÌÆ®¸¦ ÀÐ¾î¼ ÀúÀåÇÒ À§Ä¡¸¦ °¡¸®Å°°í ÀÖ½À´Ï´Ù. - FileInputStream ÆÄÀÏ ½Ã½ºÅÛ³»ÀÇ ÆÄÀÏ¿¡¼ µ¥ÀÌÅ͸¦ ÀԷ¹ÞÀ» ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. À̹ÌÁö°°Àº ¹ÙÀ̳ʸ® ±â¹ÝÀÇ ÆÄÀÏÀº ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ¹®ÀÚ ±â¹ÝÀÇ ÆÄÀÏÀ» ÀÐÀ» ¶§¿¡´Â FileReader Ŭ·¡½º¸¦ »ç¿ëÇÒ °ÍÀ» ±ÇÀåÇÕ´Ï´Ù. - FilterInputStream ¾î¶² InputStream °´Ã¼¿Í »ç¿ëÀÚ »çÀÌ¿¡ Á¸ÀçÇϴ Ŭ·¡½º·Î½á ÀÔ·Â ½ºÆ®¸²¿¡¼ Àд µ¥ÀÌÅ͸¦ º¯È¯Çϰųª º°µµÀÇ ±â´ÉÀ» Ãß°¡·Î Á¦°øÇÕ´Ï´Ù. Áï, FilterInputStream Ŭ·¡½º´Â ½ÇÁúÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÀԷ¹ްí ÀúÀåÇÏ´Â º°µµÀÇ InputStream °´Ã¼¸¦ Æ÷ÇÔÇÏ¿© ÀÚ½ÅÀÇ ¸Þ¼Òµå°¡ È£ÃâµÇ¸é InputStream °´Ã¼¿¡ ¾÷¹« ¼öÇàÀ» Àü´ÞÇϵµ·Ï ¸Þ¼Òµå°¡ ÀçÁ¤ÀǵǾî ÀÖ½À´Ï´Ù. ¾Æ·¡ÀÇ Å¬·¡½ºµéÀº ÀÌ Å¬·¡½º´Â »ó¼Ó¹Þ¾Æ ±â´ÉÀ» È®ÀåÇÑ Å¬·¡½ºµéÀÔ´Ï´Ù. (1) BufferedInputStream ¾î¶² InputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á ¹öÆÛ¸¦ ÀÌ¿ëÇÑ ÀÔ·Â ±â´É°ú mark(), reset() ¸Þ¼Òµå¸¦ Á¦°øÇϵµ·Ï ±â´ÉÀÌ È®ÀåµÈ Ŭ·¡½ºÀÔ´Ï´Ù. ÀÌ Å¬·¡½º°¡ »ý¼ºµÇ¸é ¹è¿ÀÌ ÇÔ²² »ý¼ºµÇ¸ç InpputStream °´Ã¼·Î ¿©·¯ ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ¹öÆÛ¿¡ Àоî¿À°í, ÀÌ ¹öÆÛ¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ read() Çϰųª skip()ÇÏ¿© ´Ù·ê ¼ö ÀÖ½À´Ï´Ù. (2) DataInputStream ¾î¶² InputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á ´Ù¸¥ InputStream °´Ã¼°¡ ÀÐÀº ¹ÙÀÌÆ® µ¥ÀÌÅ͸¦ ÀÚ¹ÙÀÇ ±âº» µ¥ÀÌÅÍ Å¸ÀÔ Çü½ÄÀ¸·Î ÀÐÀ» ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. (3) LineNumberInputStream ¾î¶² InputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á ÀоîµéÀÎ µ¥ÀÌÅÍ¿¡ Çà ¹øÈ£¸¦ ºÎ¿©ÇØ º¸°üÇÏ°í°ü¸®ÇÕ´Ï´Ù. ÀÌ Å¬·¡½º´Â Àоî¿À´Â µ¥ÀÌÅÍ¿¡ \r À̳ª \n À̳ª \r\n °¡ Á¸ÀçÇÏ´Â °æ¿ì Çà ¹øÈ£¸¦ Áõ°¡½Ãŵ´Ï´Ù. (4) PushbackInputStream ¾î¶² InputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á µ¥ÀÌÅ͸¦ Àдٰ¡ unread() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© ´Ù½Ã µ¥ÀÌÅÍ ¹ÙÀÌÆ®¸¦ ÀÔ·Â ½ºÆ®¸²¿¡ µÇµ¹·Á³õ´Â ±â´ÉÀ» ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, abcde ¶ó´Â µ¥ÀÌÅÍ°¡ ÀÔ·Â ½ºÆ®¸²¿¡¼ ÀÐÈ÷±â¸¦ ´ë±âÇÏ°í ÀÖÀ» ¶§ abcd ¸¦ ÀÐÀº ÈÄ a ¸¦ unread() ¸Þ¼Òµå·Î ÀÔ·Â ½ºÆ®¸²¿¡ µ¹·Á ³õÀ¸¸é ´ÙÀ½¿¡ Àд 2¹ÙÀÌÆ®´Â ae °¡ µË´Ï´Ù. - ObjectInputStream µ¥ÀÌÅÍÀÇ Á÷·Äȸ¦ ½ÇÇöÇϵµ·Ï µ¥ÀÌÅ͸¦ ÇϳªÀÇ °´Ã¼ ÇüÅ·ΠÀÐÀ» ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. - PipedInputStream ¸ÖƼ ¾²·¹µå ȯ°æ¿¡¼ ÇϳªÀÇ ¾²·¹µå¿¡¼ º¸³½ µ¥ÀÌÅ͸¦ ´Ù¸¥ ¾²·¹µå°¡ ¹ÞÀ»¶§ »ç¿ëÇÕ´Ï´Ù. PipedOutputStream °´Ã¼¿¡ ¿¬°áÇÏ¿© ÇØ´ç °´Ã¼°¡ Ãâ·ÂÇÏ´Â µ¥ÀÌÅ͸¦ ÀÌ ÀÔ·Â ½ºÆ®¸²ÀÌ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù. - SequenceInputStream ¼·Î ´Ù¸¥ ÀԷ½ºÆ®¸²À» ³í¸®ÀûÀ¸·Î À̾îÁÖ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. ÀÔ·Â ½ºÆ®¸²À» ¼ø¼´ë·Î ¿¬°áÇÏ¿© ÇϳªÀÇ ÀÔ·Â ½ºÆ®¸²ÀΰÍó·³ »ç¿ëÇÒ ¼ö ÀÖ°ÔÇØÁÝ´Ï´Ù. ¿¹¸¦ µé¾î a, b, c ¶ó´Â ÀÔ·Â ½ºÆ®¸²À» sequence ¶ó´Â SequenceInputStream °´Ã¼¿¡¼ ¿¬°áÇÏ¿© »ç¿ëÇÏ´Â °æ¿ì a ¿¡ 123, b ¿¡ tips ±×¸®°í c ¿¡ soft ¶ó´Â µ¥ÀÌÅÍ°¡ Á¸ÀçÇÒ ¶§ sequence ·Î µ¥ÀÌÅ͸¦ ÀÐÀ¸¸é 123tipssoft ¶ó°í ÀÐÇôÁý´Ï´Ù. - StringBufferInputStream ¹®ÀÚ¿À» ¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²À¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. ±×·¯³ª ÀÌ Å¬·¡½º´Â ¹®ÀÚ¿À» ¹ÙÀÌÆ® ¹è¿·Î Á¤È®ÇÏ°Ô º¯È¯ÇÏÁö ¸øÇϱ⶧¹®¿¡ StringReader Ŭ·¡½º¸¦ »ç¿ëÇÒ °ÍÀ» ±ÇÀåÇÕ´Ï´Ù. 2.2 OutputStream Ŭ·¡½ºÀÇ ÇÏÀ§ Ŭ·¡½º Á¾·ù - ByteArrayOutputStream Ãâ·ÂÇÒ µ¥ÀÌÅ͸¦ Ãâ·Â ½ºÆ®¸²ÀÇ ¹ÙÀÌÆ® ¹è¿¿¡ ÀúÀåÇÕ´Ï´Ù. ½ºÆ®¸²ÀÇ ¹è¿Àº µ¥ÀÌÅÍ°¡ ÀúÀåµÊ¿¡ µû¶ó ÀÚµ¿ÀûÀ¸·Î Å©±â°¡ Á¶ÀýµÇ¸ç toByteArray() ³ª toString() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© ¹è¿ ³»ÀÇ µ¥ÀÌÅ͸¦ ¹Ýȯ¹ÞÀ» ¼öµµ ÀÖ½À´Ï´Ù. - FileOutputStream ÆÄÀÏ¿¡ µ¥ÀÌÅ͸¦ ¾µ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. FileInputStream °ú ¸¶Âù°¡Áö·Î ¹®ÀÚ ±â¹ÝÀÇ ÆÄÀÏÀ» ¾µ¶§¿¡´Â FileWriter Ŭ·¡½º¸¦ »ç¿ëÇÒ °ÍÀ» ±ÇÀåÇÕ´Ï´Ù. - FilterOutputStream ¾î¶² OutputStream °´Ã¼¿Í »ç¿ëÀÚ »çÀÌ¿¡ Á¸ÀçÇϴ Ŭ·¡½º·Î½á Ãâ·Â ½ºÆ®¸²¿¡¼ Ãâ·ÂÇÒ µ¥ÀÌÅ͸¦ º¯È¯Çϰųª º°µµÀÇ ±â´ÉÀ» Ãß°¡·Î Á¦°øÇÕ´Ï´Ù. Áï, FilterOutputStream Ŭ·¡½º´Â µ¥ÀÌÅ͸¦ Ãâ·ÂÇÏ´Â º°µµÀÇ OutputStream °´Ã¼¸¦ Æ÷ÇÔÇÏ¿© ÀÚ½ÅÀÇ ¸Þ¼Òµå°¡ È£ÃâµÇ¸é OutputStream °´Ã¼¿¡ ¾÷¹« ¼öÇàÀ» Àü´ÞÇϵµ·Ï ¸Þ¼Òµå°¡ ÀçÁ¤ÀǵǾî ÀÖ½À´Ï´Ù. ¾Æ·¡ÀÇ Å¬·¡½ºµéÀº ÀÌ Å¬·¡½º´Â »ó¼Ó¹Þ¾Æ ±â´ÉÀ» È®ÀåÇÑ Å¬·¡½ºµéÀÔ´Ï´Ù. (1) BufferedOutputStream ¾î¶² OutputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á µ¥ÀÌÅÍ Ãâ·Â½Ã »ç¿ë°¡´ÉÇÑ ¹öÆÛ¸µ ±â´ÉÀ» Ãß°¡ÇÑ °ÍÀÔ´Ï´Ù. ÀÌ °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅ͸¦ ¾²¸é ¹öÆÛ¿¡ µ¥ÀÌÅÍ°¡ ÀúÀåµÇ´Ù°¡ ¹öÆÛ°¡ Â÷¸é ±×¶§ OutputStream °´Ã¼·Î µ¥ÀÌÅ͸¦ Ãâ·ÂÇÏ°Ô µË´Ï´Ù. ¹öÆÛ°¡ °¡µæ Â÷Áö ¾ÊÀº ½ÃÁ¡¿¡¼ µ¥ÀÌÅ͸¦ Ãâ·ÂÇÏ°íÀÚ ÇÒ¶§¿¡´Â flush() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. (2) DataOutputStream ¾î¶² OutputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á ÀÚ¹Ù ±âº» µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î µ¥ÀÌÅÍ°¡ ³Ñ¾î¿À¸é ÀÌ Å¬·¡½º°¡ ¹ÙÀÌÆ® ÇüÅ·Πº¯È¯ÇÏ¿© ³»ºÎÀÇ OutputStream °´Ã¼¿¡°Ô Àü´ÞÇÕ´Ï´Ù. (3) PrintStream ¾î¶² OutputStream °´Ã¼ÀÇ ÇÊÅÍ Å¬·¡½º·Î½á µ¥ÀÌÅ͸¦ ÀÚ¹ÙÀÇ ±âº» µ¥ÀÌÅÍ Å¸ÀÔ°ú Çü½ÄÀ¸·Î Ãâ·Â ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÈçÈ÷ Äֿܼ¡¼ Ãâ·ÂÇÒ ¶§ »ç¿ëÇÏ´Â System.out.println ¿¡¼ System.out ÀÌ PrintStream °´Ã¼ÀÔ´Ï´Ù. - ObjectOutputStream µ¥ÀÌÅÍÀÇ Á÷·Äȸ¦ ½ÇÇöÇϵµ·Ï µ¥ÀÌÅ͸¦ ÇϳªÀÇ °´Ã¼ ÇüÅ·Π¾µ ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. - PipedOutputStream ¸ÖƼ ¾²·¹µå ȯ°æ¿¡¼ ÇϳªÀÇ ¾²·¹µå¿¡¼ ´Ù¸¥ ¾²·¹µå·Î µ¥ÀÌÅ͸¦ º¸³¾¶§ »ç¿ëÇÕ´Ï´Ù. PipedInputStream °´Ã¼¿¡ ¿¬°áÇÏ¿© ÇØ´ç °´Ã¼°¡ µ¥ÀÌÅ͸¦ ÀÐÀ» ¼ö ÀÖµµ·Ï µ¥ÀÌÅ͸¦ Ãâ·ÂÇØÁÝ´Ï´Ù.
|