½ºÆ®¸²°ú ³×Æ®¿÷

±Û/À±°æ±¸

1999³â 4¿ùÈ£ ¸¶¼Ò ÁÖ´Ï¾î ¿ø°íÀÔ´Ï´Ù.

ÇÊÀÚ°¡ óÀ½ ÀÚ¹Ù ¾ð¾î¸¦ ¸¸³µÀ» ¶§ °¡Àå ´ä´äÇß´ø ºÎºÐÀº ÇÑ±Û Áö¿ø ¹®Á¦¿´½À´Ï´Ù. Çѹݵµ¿¡ °ÅÁÖÇÏ´Â ÇÁ·Î±×·¡¸Ó¶ó¸é ÇѱÛÀ» ¿øÈ°ÇÏ°Ô »ç¿ëÇÒ ¼ö ¾ø´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ °í¿î ½Ã¼±À¸·Î ¹Ù¶óº¼ ¼ö ¾øÀ» °ÍÀÔ´Ï´Ù.

ÀÚ¹Ù´Â Ãʱ⠼³°è¿¡¼­ºÎÅÍ ±¹°¡³ª ±¹¾î¿¡ °ü°è¾øÀÌ ÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇϱâ À§ÇØ ³»ºÎÀûÀ¸·Î char À¯ÇüÀ» 8ºñÆ®°¡ ¾Æ´Ñ ºÎÈ£ ¾ø´Â 16ºñÆ®·Î ÁöÁ¤ÇÏ¿´À¸¸ç, ¹®ÀÚ Äڵ带 ±¹Á¦ Ç¥ÁØÀÎ À¯´ÏÄÚµå·Î ó¸®ÇÏ°Ô ÇÏ¿´½À´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹ÙÀÇ Ã¹ °ø½Ä ¹öÀüÀÎ JDK 1.0Àº ÇÑ±Û µîÀ» Áö¿øÇϴ Ŭ·¡½º¿¡ ½É°¢ÇÑ ¹ö±×°¡ ÀÖ¾ú½À´Ï´Ù. ÀÚ¹Ù ¾ð¾î¸¦ ¸¸µç ´ë¸Ó¸® ¾ÆÀú¾¾, Á¦ÀÓÁî °í½½¸µ ¾¾°¡ °¢±¹ÀÇ ¹®ÀÚ¸¦ ³ªÅ¸³»´Â Ç¥ÁØÀÎ À¯´ÏÄڵ带 À߸ø ÀÌÇØÇÏ°í ÀÖ¾ú´ø ¶§¹®ÀÌÁö¿ä.

ÀÌ ¹®Á¦´Â ´ÙÀ½ ¹öÀüÀÎ JDK 1.1ºÎÅÍ ¹ö±×°¡ ¼öÁ¤µÇ°í, ´Ù¾çÇÑ ±¹°¡, ¾ð¾î¸¦ Áö¿øÇϸ鼭ºÎÅÍ °ÅÀÇ ¿ÏÀüÈ÷ ÇØ°áµÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ÀÚ¹Ù´Â ´ÙÁß Ç÷§Æû ÇÁ·Î±×·¥À» ¸¸µé»Ó¸¸ ¾Æ´Ï¶ó ÇϳªÀÇ ÄÚµå·Î ´Ù¾çÇÑ ±¹°¡¿Í ±¹¾î¸¦ Áö¿øÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ÁøÁ¤ÇÑ Àǹ̿¡¼­ ¼ö¸¹Àº Ç÷§Æû¿¡¼­ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥À» ¸¸µå´Â ¾ð¾î°¡ µÈ °ÍÀÔ´Ï´Ù.

ÀÚ¹Ù´Â µ¿ÀÏÇÑ ÇÁ·Î±×·¥ÀÌ ±¹°¡, ±¹¾î, ¿î¿µ üÁ¦, Çϵå¿þ¾î ȯ°æ µîÀÇ À庮À» ³Ñ¾î ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ÇÒ»Ó¸¸ ¾Æ´Ï¶ó ÀÎÅÍ³Ý ½Ã´ë¿¡ ž ÇÁ·Î±×·¡¹Ö ¾ð¾î´ä°Ô ÀÎÅͳÝÀ¸·Î ¿¬°áµÇ´Â ¼ö¸¹Àº ÄÄÇ»Å͵éÀ» Çϳª·Î ¹­¾îÁÖ´Â ¿ªÇÒµµ ÇÏ°í ÀÖ½À´Ï´Ù. ¹Ù·Î ³×Æ®¿÷¿¡ ´ëÇÑ Áö¿øÀ» ±âº» ±â´ÉÀ¸·Î Æ÷ÇÔÇÏ°í Àֱ⠶§¹®ÀÔ´Ï´Ù. ³×Æ®¿÷ ºÐ»ê ȯ°æÀ» ±¸¼ºÇÏ´Â Åë½Å ±Ô¾àÀÎ TCP/IP¸¦ Áö¿øÇÏ´Â °ÍÀº ¹°·Ð, ÀÌ¿¡ ±â¹ÝÇÑ ¿ùµå¿ÍÀ̵åÀ¥ ±Ô¾àÀÎ HTTP, ÀÎÅÍ³Ý ÆÄÀÏ Àü¼Û ±Ô¾àÀÎ FTP µîÀ» Á÷Á¢ Áö¿øÇϱ⵵ ÇÕ´Ï´Ù. ÀÎÅÍ³Ý ¹× À¯,¹«¼± ³×Æ®¿÷ ±Ô¾àÀ¸·Î Áö±¸ÃÌÀÌ Çϳª·Î ¿«¾îÁ® °¡´Â ½Ã´ëÀÇ ÇÁ·Î±×·¡¹Ö¿£ ÀÚ¹Ù°¡ ÀÌÁ¦ ºüÁú ¼ö ¾ø´Â ÇÙ½É °³¹ß ¾ð¾î°¡ µÇ¾ú½À´Ï´Ù.

À̹ø È£¿¡¼­´Â ³×Æ®¿÷ ÀÔÃâ·ÂÀº ¹°·Ð, Ç¥ÁØ ÀÔÃâ·Â, ÆÄÀÏ ÀÔÃâ·Â µî ÀÚ¹ÙÀÇ ÀÔÃâ·Â¿¡ »ç¿ëµÇ´Â ½ºÆ®¸² ±â´ÉÀ» Áß½ÉÀ¸·Î ÇѱÛÀ» »ç¿ëÇϱâ À§ÇÑ ¹®Àڼ º¯È¯±îÁö ¾Ë¾Æº¸µµ·Ï ÇÕ´Ï´Ù.

1. ÀÔÃâ·Â ½ºÆ®¸²

À©µµ¿ìÀÇ µµ½º âÀ̳ª À¯´Ð½º ¼Ð·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ±â À§Çؼ­ º¸Åë Ç¥ÁØ ÀÔ·ÂÀ» »ç¿ëÇÏ°í ¶Ç µµ½º âÀ̳ª ¼Ð·Î °á°ú³ª ¿¡·¯¸¦ Ãâ·ÂÇϱâ À§Çؼ­´Â Ç¥ÁØ Ãâ·Â°ú Ç¥ÁØ ¿¡·¯¸¦ »ç¿ëÇÕ´Ï´Ù. ¶Ç, ÆÄÀÏÀ» ÀÐ°í ¾²±â À§Çؼ­´Â ÆÄÀÏ ÀÔÃâ·ÂÀÌ ÇÊ¿äÇÏ°í ³×Æ®¿÷À» ÅëÇØ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ±â À§Çؼ­´Â ³×Æ®¿÷ ÀÔÃâ·ÂÀÌ ÇÊ¿äÇÕ´Ï´Ù.

ÀÚ¹Ù´Â ÀÌ·¯ÇÑ ÀÔÃâ·ÂÀ» »ç¿ëÇÏ´Â µ¥¿¡ ½ºÆ®¸²À̶õ ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù. ½ºÆ®¸²Àº ¹æÇâÀÌ ÀÖ´Â ÇϳªÀÇ È帧À» ¶æÇÏ´Â ¸»·Î, º¸Åë 8ºñÆ® ¹ÙÀÌÆ®·Î ±¸¼ºµÈ µ¥ÀÌÅ͵éÀÇ ÀÏ·ÃÀÇ È帧À» ³ªÅ¸³À´Ï´Ù.

½ºÆ®¸²Àº ¼øÂ÷ÀûÀÎ È帧À̱⠶§¹®¿¡ ³»ºÎÀûÀ¸·Î ¸ÕÀú µé¾î¿Â °ÍÀÌ ¸ÕÀú ³ª°¡´Â ¼±ÀÔ¼±Ãâ(FIFO) ±¸Á¶·Î ±¸ÇöµË´Ï´Ù. ÀÚ¹ÙÀÇ ¸ðµç ÀԷ°ú Ãâ·ÂÀº ÀÌ·¯ÇÑ ½ºÆ®¸² ±¸Á¶·Î ¸¸µé¾îÁý´Ï´Ù. ´Ü Çϳª ¿¹¿Ü°¡ Àִµ¥ ¹Ù·Î ÀÓÀÇ Á¢±Ù ÆÄÀÏÀ» ³ªÅ¸³»´Â RandomAccessFile Ŭ·¡½ºÀÔ´Ï´Ù. ÀÓÀÇ Á¢±Ù ÆÄÀÏ¿¡¼­´Â ¼øÂ÷ÀûÀ¸·Î Àаųª ¾²´Â °ÍÀÌ ¾Æ´Ï¶ó ÆÄÀÏÀÇ ½ÃÀÛÁ¡À¸·ÎºÎÅÍÀÇ °Å¸®(¿ÀÇÁ¼Â)¸¦ ÁöÁ¤ÇÏ¿© ÀÓÀÇÀÇ À§Ä¡¿¡ ¹Ù·Î Á¢±ÙÇÏ¿© Àаųª ¾µ ¼ö ÀÖ½À´Ï´Ù.

1.1 ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º

ÀÚ¹Ù¿¡¼­ ½ºÆ®¸² ±¸Á¶¸¦ ³ªÅ¸³»´Â ¿©·¯ °¡Áö Ŭ·¡½ºµéÀº ¸ðµÎ java.io ÆÐÅ°Áö¿¡ ¼ÓÇϸç InputStream Ŭ·¡½º ȤÀº OutputStream Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ¸¸µé¾îÁý´Ï´Ù. ÀԷ¿¡ °ü°èµÈ ¿©·¯ °¡Áö ½ºÆ®¸²µéÀº InputStream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºµéÀÌ°í Ãâ·Â¿¡ °ü°èµÈ ¿©·¯ ½ºÆ®¸² Ŭ·¡½ºµéÀº OutputStream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºµéÀÔ´Ï´Ù.

´ÙÀ½ Ç¥´Â °¢°¢ java.io ÆÐÅ°Áö¿¡ ÀÖ´Â ¿©·¯ ÀÔ·Â ¹× Ãâ·Â ½ºÆ®¸² Ŭ·¡½ºµéÀ» º¸¿©ÁÝ´Ï´Ù.

Ŭ·¡½º

¼³¸í

InputStream

¸ðµç ¹ÙÀÌÆ® ½ºÆ®¸² ÀԷ Ŭ·¡½ºÀÇ ºÎ¸ð Ŭ·¡½º

ByteArrayInputStream

¹ÙÀÌÆ® ¹è¿­·ÎºÎÅÍ ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º

FileInputStream

ÆÄÀÏÀ» ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º

FilterInputStream

´Ù¸¥ ÀÔ·Â ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ °¡°øÇÏ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º

BufferedInputStream

µ¥ÀÌÅ͸¦ ÀоîµéÀÏ ¶§ ³»ºÎ ¹öÆÛ¸¦ »ç¿ëÇϵµ·Ï ÇÏ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º

DataInputStream

ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ ÀÚ¹Ù À¯ÇüÀ» ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸²

PushbackInputStream

½ºÆ®¸²À¸·ÎºÎÅÍ ÀÏÁ¤ÇÑ Å©±âÀÇ µ¥ÀÌÅ͸¦ Àоú´Ù°¡ ¾È ÀÐÀº »óÅ·ΠµÇµ¹¸± ¼ö ÀÖ´Â ÀÔ·Â ½ºÆ®¸²

ObjectInputStream

ÀúÀåµÈ °´Ã¼ µ¥ÀÌÅ͸¦ ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸²

PipedInputStream

»ý¼ºµÈ ÆÄÀÌÇÁ·ÎºÎÅÍ ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸²

SequenceInputStream

¿©·¯ ÀÔ·Â ½ºÆ®¸²À» Â÷·Ê·Î ÇϳªÀÇ ¿¬°áµÈ ÀÔ·Â ½ºÆ®¸²À¸·Î °£ÁÖÇÏ°Ô ÇØÁÖ´Â ÀÔ·Â ½ºÆ®¸²

Ç¥ 1 ÀÔ·Â ½ºÆ®¸² Ŭ·¡½ºµé


Ŭ·¡½º

¼³¸í

OutputStream

¸ðµç ¹ÙÀÌÆ® ½ºÆ®¸² Ãâ·Â Ŭ·¡½ºÀÇ ºÎ¸ð Ŭ·¡½ºÀÌ´Ù.

ByteArrayOutputStream

¹ÙÀÌÆ® ¹è¿­·Î ¾²´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º

FileOutputStream

ÆÄÀÏ·Î ¾²´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º

FilterOutputStream

´Ù¸¥ Ãâ·Â ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ °¡°øÇÏ´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º

BufferedOutputStream

µ¥ÀÌÅ͸¦ ¾µ ¶§ ³»ºÎ ¹öÆÛ¸¦ »ç¿ëÇϵµ·Ï ÇÏ´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º

DataOutputStream

Ãâ·Â ½ºÆ®¸²À¸·Î ÀÚ¹Ù À¯ÇüÀ» ³»º¸³»´Â Ãâ·Â ½ºÆ®¸²

PrintStream

´Ù¾çÇÑ µ¥ÀÌÅÍ À¯ÇüÀ» °£´ÜÇÏ°Ô Ãâ·ÂÇÏ´Â ÆíÀÇÀûÀÎ Ãâ·Â ½ºÆ®¸²

ObjectOutputStream

°´Ã¼ µ¥ÀÌÅ͸¦ ³»º¸³»´Â Ãâ·Â ½ºÆ®¸²

PipedOutputStream

ÆÄÀÌÇÁ¸¦ »ý¼ºÇÏ¿© µ¥ÀÌÅ͸¦ ³»º¸³»´Â Ãâ·Â ½ºÆ®¸²

Ç¥ 2 Ãâ·Â ½ºÆ®¸² Ŭ·¡½ºµé


1.2 ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ ÆÄÀÏ º¹»ç

ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¹è¿ì·Á¸é ÀüÇüÀûÀÎ »ç¿ë ¿¹¸¦ º¸´Â °ÍÀÌ °¡Àå ÁÁÀ» °ÍÀÔ´Ï´Ù. ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½ºµéÀ» »ç¿ëÇÏ¿© ÀÌÁø ÆÄÀÏÀ» º¹»çÇÏ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ¸¸µé¾îº¸¸é¼­ »ç¿ë¹ýÀ» ÀÍÈ÷µµ·Ï ÇÏ°Ú½À´Ï´Ù.

ÆÄÀÏ ÀÔÃâ·Â¿¡ ÇØ´çÇÏ´Â ½ºÆ®¸² Ŭ·¡½º´Â °¢°¢ FileInputStream°ú FileOutputStreamÀÔ´Ï´Ù.

¸ÕÀú FileInputStream ȤÀº FileOutputStreamÀ» »ý¼ºÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.

// ¿øõ ÆÄÀÏÀÎ source.dat ÆÄÀϷκÎÅÍ ÀоîµéÀÌ´Â ÆÄÀÏ ÀÔ·Â ½ºÆ®¸²À» ¸¸µé °æ¿ì

FileInputStream fileIn = new FileInputStream("source.dat");

// ¸ñÀû ÆÄÀÏÀÎ destine.dat ÆÄÀÏ·Î ¾²´Â ÆÄÀÏ Ãâ·Â ½ºÆ®¸²À» ¸¸µé °æ¿ì

FileOutputStream fileOut = new FileOutputStream("destine.dat");

¶Ç, ÆÄÀÏÀ» ÀÐ°í ¾µ ¶§ È¿À²À» ³ôÀ̱â À§ÇÏ¿© ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸²À» ³»ºÎÀûÀ¸·Î ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²À¸·Î º¯È¯ÇÏ¿© »ç¿ëÇÒ °ÍÀÔ´Ï´Ù. Buffered<Input/Output>Stream, Data<Input/Output>Stream, PrintStream µîÀº Ŭ·¡½º »ó¼Ó °èÃþ ±¸Á¶¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖµíÀÌ Filter<Input/Output>Stream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºÀε¥ ´Ù¸¥ ÀÔÃâ·Â ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ °¡°øÇÏ¿© ÇÁ·Î±×·¡¸Ó°¡ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ±â´ÉÀ» ÇÏ´Â ÀÔÃâ·Â Ŭ·¡½ºµéÀÔ´Ï´Ù.

À§ÀÇ fileIn, fileOut ÀÔÃâ·Â ½ºÆ®¸² °´Ã¼¸¦ »ç¿ëÇÏ¿© °¢°¢ ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²À» »ý¼ºÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.

// ´ÙÀ½¿¡¼­ 512´Â ¹öÆÛ ÀÔÃâ·Â Ŭ·¡½º°¡ ³»ºÎÀûÀ¸·Î »ç¿ëÇÒ ¹öÆÛÀÇ Å©±â¸¦ ÁöÁ¤ÇÏ´Â °ªÀÔ´Ï´Ù.

// ¹öÆÛ Å©±â¸¦ ÀÎÀÚ·Î ¹ÞÁö ¾Ê´Â ¹öÀüÀÇ »ý¼ºÀÚ´Â ±âº»°ªÀ¸·Î 512¸¦ »ç¿ëÇÕ´Ï´Ù.

BufferedInputStream in = new BufferedInputStream(fileIn, 512);

BufferedOutputStream out = new BufferedOutputStream(fileOut, 512);

ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥Àº ¿øõ ÆÄÀÏÀÇ ¹öÆÛ ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Àоîµé¿© ¸ñÀû ÆÄÀÏÀÇ ¹öÆÛ Ãâ·Â ½ºÆ®¸²À¸·Î µ¥ÀÌÅ͸¦ ¾²´Â ÀÏÀ» ÇÒ °ÍÀÔ´Ï´Ù. µ¥ÀÌÅ͸¦ ÀоîµéÀÏ ¶§¿¡´Â read() ¸Þ¼Òµå¸¦, ¾µ ¶§¿¡´Â write() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ read() ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀÌ -1ÀÌ¸é ½ºÆ®¸²ÀÇ ³¡¿¡ µµ´ÞÇÑ °ÍÀ» ¶æÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡´Â ÆÄÀÏÀ» ¸ðµÎ ÀоúÀ½À» ¶æÇÕ´Ï´Ù. ±×·¯¹Ç·Î ¿©±â¿¡¼­´Â while ¹Ýº¹¹®À» »ç¿ëÇÏ¿© read() ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀÌ 0°ú °°°Å³ª Å©¸é ÀÐÀº µ¥ÀÌÅ͸¦ Ãâ·Â ½ºÆ®¸²À¸·Î ¾²±â¸¦ ¹Ýº¹ÇÏ¸é µË´Ï´Ù.

byte buffer[] = new byte[1024]; // ÀÐÀº ¹ÙÀÌÆ® µ¥ÀÌÅ͵éÀ» ÀúÀåÇÒ ¹öÆÛ

try {

int nRead=0; // read() ¸Þ¼Òµå°¡ ÇÑ ¹ø¿¡ ÀÐÀº ¹ÙÀÌÆ® ¼ö¸¦ ÀúÀåÇÒ º¯¼ö

while ((nRead=in.read(buffer, 0, 1024))>=0) {

out.write(buffer, 0, nRead); // ÀоîµéÀÎ ¹ÙÀÌÆ® µ¥ÀÌÅ͸¦ ¾¹´Ï´Ù.

}

} catch (IOException ie) { // ÀÐ°í ¾²´Â µµÁß ¿¹¿Ü ¹ß»ýÇϸé ó¸®ÇÕ´Ï´Ù.

System.err.println("\n¿¡·¯ : "+ie.getMessage());

}

finally { // ÀÔÃâ·Â ½ºÆ®¸² »ç¿ëÀÌ ³¡³µÀ¸¸é ¹Ýµå½Ã ¸®¼Ò½º¸¦ ÇØÁöÇϵµ·Ï ÇÕ´Ï´Ù.

try { in.close(); } catch (IOException ie) { }

try { out.close(); } catch (IOException ie) { }

}

ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÒ ¶§ ÁÖÀÇÇÒ Á¡ Áß Çϳª´Â ¹Ýµå½Ã ÀÔÃâ·Â ½ºÆ®¸² »ç¿ëÀÌ ³¡³ª¸é ÇÒ´çµÈ ¸®¼Ò½º¸¦ ÇØÁöÇØÁà¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. °¢ ½ºÆ®¸²Àº ÇÁ·Î¼¼½º ´ÜÀ§·Î ÇÒ´çµÇ´Â ¸®¼Ò½º¸¦ »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î ¹Ýµå½Ã close()¸¦ ÇØÁà¾ß ¸Þ¸ð¸® À¯Ãâ µîÀ» ¸·À» ¼ö°¡ ÀÖ½À´Ï´Ù. À§¿¡¼­ º¸µíÀÌ ¿¹¿Ü°¡ ¹ß»ýÇÏ´Â »óȲ¿¡¼­µµ close()¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. try { ... } finally { } ºí·ÏÀº ¿¹¿Ü ¹ß»ý ½Ã¿¡µµ close() ½ÇÇàÀ» º¸ÀåÇØÁÖ´Â ¹æ¹ýÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿Ï¼ºµÈ ¼Ò½º ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.

import java.io.*;

class FileCopy {

public static void main(String args[]) {

if (args.length < 2) {

System.out.println("»ç¿ë¹ý : java FileCopy ¿øõÆÄÀÏ ¸ñÀûÆÄÀÏ");

System.exit(1);

}

if (args[0].equals(args[1])) {

System.out.println("¿¡·¯ : ¿øõÆÄÀÏ°ú ¸ñÀûÆÄÀÏÀÌ °°½À´Ï´Ù.");

System.exit(1);

}

BufferedInputStream in = null; // ³Î °ªÀ¸·Î ÃʱâÈ­

try {

in = new BufferedInputStream(

new FileInputStream(args[0]), // args[0]´Â ¿øõ ÆÄÀÏ À̸§

1024); // ¹öÆÛ Å©±â

}

catch (FileNotFoundException fnfe) {

System.err.println("¿¡·¯ : "+args[0]+" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù.");

System.exit(1);

}

catch (Exception e) {

System.err.println("¿¡·¯ : "+e.toString());

System.exit(1);

}

BufferedOutputStream out = null; // ³Î °ªÀ¸·Î ÃʱâÈ­

try {

out = new BufferedOutputStream(

new FileOutputStream(args[1]), // args[1]Àº ¸ñÀû ÆÄÀÏ À̸§

1024); // ¹öÆÛ Å©±â

}

catch (IOException ie) {

System.err.println("¿¡·¯ : "+args[1]+" ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù.");

System.exit(1);

}

catch (Exception e) {

System.err.println("¿¡·¯ : "+e.getMessage());

System.exit(1);

}

// º¹»çÇϱâ

byte buffer[] = new byte[1024]; // ¹öÆÛ ÇÒ´ç

int nWrote=0;

System.out.println(args[0]+" ÆÄÀÏÀ» "+args[1]+" ÆÄÀÏ·Î º¹»çÇÏ°í ÀÖ½À´Ï´Ù.");

try {

int nRead=0;

while ((nRead=in.read(buffer, 0, 1024))>=0) {

out.write(buffer, 0, nRead);

nWrote+=nRead;

System.out.print("*"); // º¹»ç ÁßÀÓÀ» Ç¥½Ã

}

System.out.println();

System.out.println(args[1]+" ÆÄÀÏ¿¡ "+nWrote+" ¹ÙÀÌÆ®¸¦ ½è½À´Ï´Ù.");

} catch (IOException ie) {

System.err.println("\n¿¡·¯ : "+ie.getMessage());

}

finally {

try { in.close(); } catch (IOException ie) { }

try { out.close(); } catch (IOException ie) { }

}

}

}

<¿¹Á¦> ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥

´ÙÀ½Àº ½ÇÇàÇÑ ¿¹ÀÔ´Ï´Ù.

E:\HNC\WORK\maso4>java FileCopy c:\windows\telnet.exe telnet.exe

c:\windows\telnet.exe ÆÄÀÏÀ» telnet.exe ÆÄÀÏ·Î º¹»çÇÏ°í ÀÖ½À´Ï´Ù.

******************************************************************

telnet.exe ÆÄÀÏ¿¡ 66672 ¹ÙÀÌÆ®¸¦ ½è½À´Ï´Ù.

1.3 ¹ÙÀÌÆ® ½ºÆ®¸²°ú ¹®ÀÚ ½ºÆ®¸²

InputStream Ŭ·¡½º¿Í OutputStream Ŭ·¡½º¸¦ »ó¼ÓÇÏ´Â ÀÔÃâ·Â ½ºÆ®¸²Àº ¹ÙÀÌÆ® ´ÜÀ§ÀÇ ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù¿¡¼­´Â ¹®ÀÚ¸¦ 16ºñÆ® ´ÜÀ§ÀÇ À¯´ÏÄÚµå·Î Ç¥ÇöÇÕ´Ï´Ù. µû¶ó¼­ ¹ÙÀÌÆ® ´ÜÀ§¸¦ ÅëÇØ ÀÔÃâ·ÂµÈ ½ºÆ®¸²À¸·Î ÀÚ¹ÙÀÇ ¹®ÀÚ¿­À» Ç¥ÇöÇÏ·Á¸é ¹®ÀÚ ÀÎÄÚµù¿¡ µû¶ó ¹®ÀÚ¿­À» ¹ÙÀÌÆ® ¹è¿­·Î º¯È¯ÇÏ¿© Àü¼ÛÇÑ ´ÙÀ½, Àü¼ÛµÈ ¹ÙÀÌÆ® ¹è¿­À» ¿ø·¡ÀÇ ¹®ÀÚ¿­·Î ´Ù½Ã º¯È¯ÇÏ´Â °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ÀÌ·¯ÇÑ ºÒÆíÀ» ÇØ°áÇÏ°í º¸´Ù È¿À²ÀûÀ¸·Î ¹®ÀÚ¿­À» ½ºÆ®¸²À» ÅëÇÏ¿© ÀÐ°í ¾µ ¼ö ÀÖµµ·Ï À¯´ÏÄÚµå ¹®ÀÚ¸¦ »ç¿ëÇÏ´Â ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù.

¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²ÀÌ InputStream Ŭ·¡½º¿Í OutputStream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºµéÀ̵íÀÌ, ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º´Â ÀÔ·ÂÀ» ´ã´çÇÏ´Â Reader Ŭ·¡½º¿Í Ãâ·ÂÀ» ´ã´çÇÏ´Â Writer Ŭ·¡½º¸¦ »ó¼ÓÇÏ´Â ÀÚ½Ä Å¬·¡½ºµéÀ̸ç, °¢ ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º¿¡´Â ´ëÀÀµÇ´Â ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½ºµéÀÌ Á¦°øµË´Ï´Ù.

´ÙÀ½Àº ¹ÙÀÌÆ® ½ºÆ®¸²°ú ¹®ÀÚ ½ºÆ®¸² Ŭ·¡½ºµéÀ» ´ëÀÀ½ÃŲ Ç¥ÀÔ´Ï´Ù.

¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º

¹®ÀÚ ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º

InputStream

Reader

ByteArrayInputStream

CharArrayReader

FileInputStream

FileReader

FilterInputStream

FilterReader

BufferedInputStream

BufferedReader

DataInputStream

¡¿

PushbackInputStream

PushbackReader

ObjectInputStream

¡¿

PipedInputStream

PipedReader

SequenceInputStream

¡¿

¡¿

LineNumberReader (¹®ÀÚ¿­À» ÇÑ ÁÙ¾¿ ÀоîµéÀ̴ Ŭ·¡½º)

¡¿

InputStreamReader (¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²À» ¹®ÀÚ ÀÔ·Â ½ºÆ®¸²À¸·Î º¯È¯Çϴ Ŭ·¡½º)

Ç¥ 3 ¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²°ú ¹®ÀÚ ÀÔ·Â ½ºÆ®¸² Ŭ·¡½ºµé


¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸² Ŭ·¡½º

¹®ÀÚ Ãâ·Â ½ºÆ®¸² Ŭ·¡½º

OutputStream

Writer

ByteArrayOutputStream

CharArrayWriter

FileOutputStream

FileWriter

FilterOutputStream

FilterWriter

BufferedOutputStream

BufferedWriter

DataOutputStream

¡¿

PrintStream

PrintWriter

ObjectOutputStream

¡¿

PipedOutputStream

PipedWriter

¡¿

StringWriter (StringÀ¸·Î Ãâ·ÂÇÏ´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º)

¡¿

OutputStreamWriter (¹®ÀÚ Ãâ·Â ½ºÆ®¸²ÀÇ ¹®ÀÚ µ¥ÀÌÅ͵éÀ» ÀÎÄÚµù¿¡ ¸Â°Ô ¹ÙÀÌÆ® µ¥ÀÌÅÍ·Î º¯È¯ÇÏ¿© ¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸²À¸·Î ³»º¸³»´Â Ŭ·¡½º)

Ç¥ 4 ¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸²°ú ¹®ÀÚ Ãâ·Â ½ºÆ®¸² Ŭ·¡½ºµé


InputStreamReader Ŭ·¡½º¿Í OutputStreamWriter Ŭ·¡½º´Â ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²°ú ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²À» »óÈ£ º¯È¯Çϴ Ưº°ÇÑ Å¬·¡½ºÀÔ´Ï´Ù. InputStreamReader Ŭ·¡½º´Â ¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ ¹ÙÀÌÆ® µ¥ÀÌÅ͸¦ Àоîµé¿© ÁöÁ¤ÇÑ ÀÎÄÚµù¿¡ µû¶ó ¹®ÀÚµé·Î º¯È¯ÇÏ´Â ¹®ÀÚ ÀÔ·Â ½ºÆ®¸²À̸ç, ¸¶Âù°¡Áö·Î OutputStreamWriter Ŭ·¡½º´Â ¹®ÀÚµéÀ» ÁöÁ¤ÇÑ ÀÎÄÚµù¿¡ µû¶ó ¹ÙÀÌÆ®·Î º¯È¯ÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸²À¸·Î ³»º¸³»´Â ¿ªÇÒÀ» Çϴ Ŭ·¡½ºÀÔ´Ï´Ù.

¹®ÀÚ ÀÎÄÚµù

ÀÚ¹Ù´Â ¹®ÀÚ¸¦ ³»ºÎÀûÀ¸·Î À¯´ÏÄÚµå·Î ó¸®Çϸç, ÀÚ¹ÙÀÇ ¹®ÀÚ Çϳª°¡ Â÷ÁöÇÏ´Â Å©±â´Â 16ºñÆ®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÏ»óÀûÀ¸·Î ¿ì¸®°¡ Á¢ÇÏ´Â ÅؽºÆ® ÆÄÀϵéÀº À¯´ÏÄڵ忡 µû¶ó ¸¸µé¾îÁöÁö ¾Ê¾Ò½À´Ï´Ù. ´ëºÎºÐÀÇ ¿î¿µ üÁ¦°¡ ¾ÆÁ÷ À¯´ÏÄڵ带 Á¦´ë·Î Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ¿î¿µ üÁ¦¿Í ¼ÒÇÁÆ®¿þ¾î¿¡ µû¶ó ¿©·¯ °¡Áö ´Ù¸¥ ÀÎÄÚµùÀ¸·Î ÇѱÛÀ» Ç¥ÇöÇÕ´Ï´Ù.

ÀÚ¹Ù¿¡¼­ Áö¿øÇÏ´Â ÇÑ±Û ÀÎÄÚµùÀº Cp933, MS949(ȤÀº Cp949), EUC_KR, ISO2022KR µîÀÔ´Ï´Ù. ÀÌ Áß °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â °ÍÀº ´ëºÎºÐÀÇ ÇѱÛÈ­µÈ ¿î¿µ üÁ¦¿¡¼­ ÀÚ¹ÙÀÇ ±âº» ÀÎÄÚµùÀ¸·Î ó¸®ÇÒ EUC_KR ÀÎÄÚµùÀÔ´Ï´Ù. EUC_KR ÀÎÄÚµùÀº KSC5601·Î Ç¥ÇöµÇ±âµµ ÇÕ´Ï´Ù.

´ëºÎºÐÀÇ ÇÑ±Û ÅؽºÆ®´Â EUC_KR ÀÎÄÚµù¿¡ µû¶ó ¸¸µé¾îÁö¸ç ÈçÈ÷ ¿Ï¼ºÇü ÇÑ±Û ÄÚµå¶ó°í ºÎ¸¥´Ù. À©µµ¿ì 95/98, À©µµ¿ì NT µîÀÇ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ì ½Ã½ºÅÛÀº ¿Ï¼ºÇü ÇÑ±Û Äڵ忡 Á»´õ ¸¹Àº ÇѱÛÀ» Ç¥ÇöÇÒ ¼ö ÀÖµµ·Ï ÇÑ±Û Äڵ带 Ãß°¡ÇÑ ÅëÇÕ ¿Ï¼ºÇüÀ» Áö¿øÇϴµ¥ ÀÌ ÄÚµå ÀÎÄÚµùÀ» MS949 ȤÀº Cp949¶ó°í ÇÕ´Ï´Ù. MS949 ÀÎÄÚµùÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ÇÑ±Û À©µµ¿ì 95 ÀÌÈÄ ¹öÀü¿¡¼­¸¸ Á¦´ë·Î ÀÐÀ» ¼ö ÀÖÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ÇÑ±Û À©µµ¿ì NT 4.0 ÀÌÈÄ ¹öÀüºÎÅÍ´Â ³»ºÎÀûÀ¸·Î À¯´ÏÄÚµå 2.0À» Áö¿øÇÑ´Ù°í ÇÕ´Ï´Ù.

¹®ÀÚ ÀÎÄÚµùÀÌ Áß¿äÇÑ ÀÌÀ¯´Â À¯´ÏÄڵ尡 ¾Æ´Ñ ´Ù¸¥ ÀÎÄÚµùÀ¸·Î µÈ ÅؽºÆ® ¹®¼­¸¦ Àоîµé¿© Á¦´ë·Î Ç¥ÇöÇÏ·Á¸é ÀÚ¹Ù¿¡¼­´Â À¯´ÏÄÚµå·Î º¯È¯À» ÇØ¾ß ÇÏ°í, ¶Ç È­¸é¿¡ º¸¿©ÁÙ ¶§¿¡´Â °¢ ¿î¿µ üÁ¦ÀÇ ±Û²ÃÀ» »ç¿ëÇÏ¿© º¸¿©Áà¾ß ÇϹǷΠ(°¢ ¿î¿µÃ¼Á¦ÀÇ ±Û²ÃµéÀº ¿î¿µ üÁ¦ÀÇ ÀÎÄÚµù¿¡ ¸Â°Ô ¼³°èµË´Ï´Ù) ½Ã½ºÅÛ¿¡ °íÀ¯ÇÑ ÀÎÄÚµùÀ¸·Î º¯È¯ÇÒ ÇÊ¿ä°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù.

´ÙÀ½ ¿¹Á¦´Â ÇöÀç ½Ã½ºÅÛ¿¡¼­ »ç¿ëµÇ´Â ÀÚ¹ÙÀÇ ±âº» ÀÎÄÚµùÀ» º¸¿©ÁÖ´Â °£´ÜÇÑ ¿¹Á¦ÀÔ´Ï´Ù.

import java.io.*;

class DefaultEncoding {

public static void main(String args[]) {

// ´ÙÀ½ OutputStreamWriter »ý¼ºÀÚ´Â ¹®ÀÚ¸¦ ±âº» ÀÎÄÚµù¿¡ µû¶ó

// ¹ÙÀÌÆ®·Î º¯È¯ÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â ±âº» ÀÎÄÚµù Á¤º¸¸¸ ÇÊ¿äÇÕ´Ï´Ù.

OutputStreamWriter out = new OutputStreamWriter(System.out);

System.out.println("±âº» ÀÎÄÚµù:"+out.getEncoding());

}

}

<¿¹Á¦ 4> ±âº» ÀÎÄÚµùÀ» º¸¿©ÁÖ´Â ¿¹Á¦

JDK 1.2ÀÇ °æ¿ì ÇÑ±Û À©µµ¿ì 95/98¿¡¼­ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé MS949°¡ ±âº» ÀÎÄÚµùÀ¸·Î Ãâ·ÂµË´Ï´Ù.


1.4 ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ ÅؽºÆ® ÆÄÀÏ º¹»ç

ÅؽºÆ® ÆÄÀÏÀ» º¹»çÇÒ ¶§¿¡µµ ¹°·Ð ¾ÕÀÇ ¹ÙÀÌÆ® ½ºÆ®¸² º¹»ç¸¦ »ç¿ëÇصµ ¾Æ¹«·± ¹®Á¦°¡ ¾øÀ» °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸, ÅؽºÆ® ÆÄÀÏÀÇ ³»¿ëÀ» È­¸é¿¡ º¸¿©ÁÖ°íÀÚ ÇÒ °æ¿ì¿¡´Â ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²À¸·Î´Â °ï¶õÇÕ´Ï´Ù. ÀüÇüÀûÀÎ ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² »ç¿ë¹ýÀ» ÅؽºÆ® º¹»ç ÇÁ·Î±×·¥À» ÅëÇØ ¾Ë¾Æº¸µµ·Ï ÇսôÙ.

¸ÕÀú ¿øõ ÆÄÀϷκÎÅÍ BufferedReader °´Ã¼¸¦ ¸¸µå´Â °ÍÀº BufferedInputStream °´Ã¼¸¦ ¸¸µå´Â °Í°ú °ÅÀÇ °°½À´Ï´Ù. ´Ù¸¸ InputStreamÀ» Reader·Î ¹Ù²Ù¾ú´Ù´Â Á¡¸¸ ´Ù¸¨´Ï´Ù.

// "source.txt" ÆÄÀϷκÎÅÍ 1024 ¹ÙÀÌÆ® Å©±âÀÇ ¹öÆÛ ÀÔ·Â ¹®ÀÚ ½ºÆ®¸² °´Ã¼ »ý¼º

in = new BufferedReader(new FileReader("source.txt"), 1024);

¸ñÀû ÆÄÀÏ¿¡ ¾µ Ãâ·Â ½ºÆ®¸²À¸·Î BufferedWriter °´Ã¼¸¦ ¸¸µå´Â °Íµµ BufferedOutputStream °´Ã¼¸¦ ¸¸µå´Â ¹æ¹ý°ú °ÅÀÇ °°Áö¸¸, ¿©±â¿¡¼­´Â Á»´õ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â PrintWriter °´Ã¼¸¦ ¸¸µé¾îº¾´Ï´Ù.

// ÀÚµ¿ Ç÷¯½Ã ¹æ½ÄÀ¸·Î "destine.txt" ÆÄÀÏ·Î ¾²´Â PrintWriter °´Ã¼ »ý¼º

out = new PrintWriter(new FileWriter("destine.txt"), true);

PrintWriter Ŭ·¡½º »ý¼ºÀÚÀÇ µÎ ¹ø° ÀÎÀÚ´Â println() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ °æ¿ì ÀÚµ¿À¸·Î ¹öÆÛ¸¦ Ç÷¯½ÃÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÕ´Ï´Ù. ½ÇÁ¦ ÅؽºÆ® ÆÄÀÏÀ» º¹»çÇÒ ¶§¿¡´Â ¿øõ ÅؽºÆ® ÆÄÀÏÀÇ ³»¿ëÀ» ÇÑ ÁÙ¾¿ Àоîµé¿© ¸ñÀû ÆÄÀÏ·Î ¾²´Â ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù.

try {

String line=null;

while ((line=in.readLine())!=null) {

out.println(line);

// println() ¸Þ¼Òµå´Â IOExceptionÀ» ´øÁöÁö ¾ÊÀ¸¹Ç·Î »ç¿ëÇÑ ´ÙÀ½¿¡´Â

// ¼öÇà µµÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´ÂÁö ¹Ýµå½Ã checkError() ¸Þ¼Òµå¸¦

// »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

if (out.checkError())

throw new IOException("ÆÄÀÏ ¾²±â ¿¡·¯ÀÔ´Ï´Ù.");

}

} catch (IOException ie) {

System.err.println("\n¿¡·¯ : "+ie.getMessage());

}

finally {

try { in.close(); } catch (IOException ie) { }

// PrintWriter´Â close()¿¡µµ ¿¹¿Ü¸¦ ´øÁöÁö ¾Ê´Â´Ù.

out.close();

}

Àüü ¼Ò½º ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.

import java.io.*;

class TextCopy {

public static void main(String args[]) {

if (args.length < 2) {

System.out.println("»ç¿ë¹ý : java TextCopy ¿øõÆÄÀÏ ¸ñÀûÆÄÀÏ");

System.exit(1);

}

if (args[0].equals(args[1])) {

System.out.println("¿¡·¯ : ¿øõÆÄÀÏ°ú ¸ñÀûÆÄÀÏÀÌ °°½À´Ï´Ù.");

System.exit(1);

}

BufferedReader in = null; // ³Î °ªÀ¸·Î ÃʱâÈ­

try {

in = new BufferedReader(

new FileReader(args[0]), // args[0]°¡ ¿øõ ÅؽºÆ® ÆÄÀÏ À̸§

1024); // ¹öÆÛ Å©±â

}

catch (FileNotFoundException fnfe) {

System.err.println("¿¡·¯ : "+args[0]+" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù.");

System.exit(1);

}

catch (Exception e) {

System.err.println("¿¡·¯ : "+e.getMessage());

System.exit(1);

}

PrintWriter out = null; // ³Î °ªÀ¸·Î ÃʱâÈ­

try {

out = new PrintWriter(

new FileWriter(args[1]), // args[1]Àº ¸ñÀû ÅؽºÆ® ÆÄÀÏ À̸§

true); // ÀÚµ¿ Ç÷¯½Ã ¸ðµå

}

catch (IOException ie) {

System.err.println("¿¡·¯ : "+args[1]+" ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù.");

System.exit(1);

}

catch (Exception e) {

System.err.println("¿¡·¯ : "+e.toString());

System.exit(1);

}

// º¹»çÇϱâ

int nWrote=0;

System.out.println(args[0]+" ÆÄÀÏÀ» "+args[1]+" ÆÄÀÏ·Î º¹»çÇÏ°í ÀÖ½À´Ï´Ù.");

try {

String line=null;

while ((line=in.readLine())!=null) {

out.println(line);

// println() ¸Þ¼Òµå´Â IOExceptionÀ» ´øÁöÁö ¾ÊÀ¸¹Ç·Î »ç¿ëÇÑ ´ÙÀ½¿¡´Â

// ¼öÇà µµÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´ÂÁö ¹Ýµå½Ã checkError()

// ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

if (out.checkError())

throw new IOException("ÆÄÀÏ ¾²±â ¿¡·¯ÀÔ´Ï´Ù.");

nWrote+=line.length()+1;

System.out.println(line); // Ç¥ÁØ Ãâ·ÂÀ¸·Î ÆÄÀÏ ³»¿ë Ãâ·Â

}

System.out.println();

System.out.println(args[1]+" ÆÄÀÏ¿¡ "+nWrote+" ¹®ÀÚ¸¦ ½è½À´Ï´Ù.");

} catch (IOException ie) {

System.err.println("\n¿¡·¯ : "+ie.getMessage());

}

finally {

try { in.close(); } catch (IOException ie) { }

// PrintWriter´Â close()¿¡¼­µµ ¿¹¿Ü¸¦ ´øÁöÁö ¾Ê´Â´Ù.

out.close();

}

}

}

<¿¹Á¦> ÅؽºÆ® ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥

Ç¥ÁØ ÀÔÃâ·Â ½ºÆ®¸² »ç¿ëÇϱâ

ÀÚ¹Ù¿¡¼­´Â Ç¥ÁØ ÀÔÃâ·Â ½ºÆ®¸²À» System Ŭ·¡½ºÀÇ in, out, err ¼¼ °³ÀÇ Á¤Àû »ó¼ö Çʵ带 »ç¿ëÇÏ¿© Á¦¾îÇϵµ·Ï ÇÕ´Ï´Ù.

System.inÀº Ç¥ÁØ ÀԷ¿¡ ÇØ´çÇÏ´Â InputStream °´Ã¼À̸ç, System.out°ú System.err´Â Ç¥ÁØ Ãâ·Â°ú Ç¥ÁØ ¿¡·¯¸¦ °¢°¢ ³ªÅ¸³»´Â PrintStream °´Ã¼ÀÔ´Ï´Ù.

HelloWorld ÇÁ·Î±×·¥À» ¸¸µé ¶§ºÎÅÍ »ç¿ëÇØ¿À´ø

System.out.println("Hello, world.");

´Â Ç¥ÁØ Ãâ·Â ½ºÆ®¸²À» ³ªÅ¸³»´Â System.out °´Ã¼ÀÇ println() ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀÔ´Ï´Ù.

´ÙÀ½Àº °£´ÜÇÏ°Ô Ç¥ÁØ ÀÔ·Â(Å°º¸µå)À¸·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ¾Æ Ç¥ÁØ Ãâ·Â(¸ð´ÏÅÍ)À¸·Î ´Ù½Ã Ãâ·ÂÇÏ´Â ¿¡ÄÚ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

import java.io.*;

class EchoLine {

public static void main(String args[]) {

try {

// Ç¥ÁØ ÀÔ·ÂÀ» ¹öÆÛ ¹®ÀÚ ÀÔ·Â ½ºÆ®¸²À¸·Î º¯È¯

BufferedReader in = new BufferedReader(

new InputStreamReader(System.in), 512);

while (true) {

System.out.print("ÀÔ·Â(q:Á¾·á):");

String line=in.readLine();

// Ç¥ÁØ Ãâ·ÂÀ¸·Î ÀÔ·ÂµÈ ¹®ÀÚ¿­À» ¿¡ÄÚ

System.out.println("Ãâ·Â:"+line);

// q·Î ½ÃÀÛÇÏ´Â ¹®ÀÚ¿­ÀÌ ÀԷµǸé Á¾·á

if (line.toLowerCase().startsWith("q"))

System.exit(0);

}

} catch (IOException ie) {

System.err.println("Exception:"+ie.getMessage());

}

}

}

<¿¹Á¦> Ç¥ÁØ ÀÔ·ÂÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î ¿¡ÄÚÇÏ´Â ÇÁ·Î±×·¥

¾ö¹ÐÇÏ°Ô µûÁö¸é System.outÀ¸·Î Ãâ·ÂµÇ´Â String °´Ã¼´Â ÇØ´ç ¿î¿µ üÁ¦ÀÇ ±âº» ÀÎÄÚµù¿¡ µû¶ó ¹ÙÀÌÆ®·Î º¯È¯µÇ¾î Ãâ·ÂµË´Ï´Ù. ±âº» ÀÎÄÚµùÀÌ ÇѱÛÀ» Ç¥½ÃÇÏ´Â EUC_KR ȤÀº MS949·Î ¼³Á¤µÇ¾î ÀÖ´Ù¸é À©µµ¿ì 98/NT µîÀ» Æ÷ÇÔÇÑ ¿î¿µ üÁ¦°¡ ÀÌ ¹ÙÀÌÆ®µéÀÇ ¿¬¼ÓÀ» Çѱ۷ΠÀνÄÇÏ¿© °á°úÀûÀ¸·Î´Â 2¹ÙÀÌÆ® ¹®ÀڷΠ󸮵Ǵ ÇѱÛÀ» Á¦´ë·Î µð½ºÇ÷¹ÀÌÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸, Á»´õ Á¤È®ÇÏ°Ô ÇÏÀÚ¸é ¹®ÀÚ¿­, Áï String °´Ã¼¸¦ Ãâ·ÂÇÏ°íÀÚ ÇÒ ¶§¿¡´Â Ç¥ÁØÀûÀÎ ¹æ¹ýÀÎ PrintWriter Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

PrintWriter out = new PrintWriter(System.out, true);

À§¿Í °°ÀÌ Ç¥ÁØ Ãâ·ÂÀ» Àμ⠹®ÀÚ ½ºÆ®¸²À¸·Î º¯È¯ÇÏ¿© Ç¥ÁØ Ãâ·ÂÀ¸·Î ³ª°¡´Â ½ºÆ®¸²À» ¹®ÀÚ ½ºÆ®¸²À¸·Î ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.


2. ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö

ÀÚ¹Ù´Â ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÔ´Ï´Ù. Àû¾îµµ ±Û·Î¹ú ³×Æ®¿÷ ½Ã´ëÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÓ¿¡´Â ºÐ¸íÇÕ´Ï´Ù.

ÀÎÅͳÝÀ» ¹è°æÀ¸·Î ž°í ÀÎÅͳݰú ºÐ»ê ȯ°æÀ» À§ÇÑ µ¶Æ¯ÇÑ ÇÁ·Î±×·¥ ½ÇÇà ÇüÅÂÀÎ ¾ÖÇø´À» Áö¿øÇÏ´Â °ÍÀ» ºÁµµ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾ÖÇø´À̶ó´Â ÇÁ·Î±×·¥Àº À¥ ºê¶ó¿ìÀú¶ó´Â ½ÇÇà ȯ°æÀÌ ÀÎÅͳÝÀ» ÅëÇؼ­ ÇÁ·Î±×·¥ ½ÇÇà Äڵ尡 ´Ù¿î·ÎµåÇÏ¿© ½ÇÇàÇϹǷΠ±× ÀÚü°¡ ³×Æ®¿÷ ÇÁ·Î±×·¥ÀÌ¸ç ³×Æ®¿÷À» »ç¿ëÇÏ¿© ¾ÖÇø´ÀÌ ÇÊ¿äÇÑ ¸®¼Ò½º¸¦ ±¸Çϱ⵵ ÇÏ¿´½À´Ï´Ù. ¹°·Ð ÇÁ·Î±×·¡¸Ó´Â ÀÌ°ÍÀÌ ³×Æ®¿÷ ±â´ÉÀ» »ç¿ëÇÏ°í ÀÖ´Ù´Â º°´Ù¸¥ ÀÚ°¢ ¾øÀÌ, Àڽŵµ ¸ð¸£°Ô ¾ÖÇø´À̶ó´Â º¹ÀâÇÑ ³×Æ®¿÷ ÇÁ·Î±×·¥À» ¸¸µé¾î¿Ô½À´Ï´Ù. ÀÌ°ÍÀº ÀÚ¹Ù°¡ ³×Æ®¿÷¿¡ ´ëÇÑ ¿©·¯ °¡Áö ±â´ÉÀ» ±âº»ÀûÀ¸·Î Áö¿øÇÏ°í ÀÖÀ¸¸ç, ¾ÖÇø´Àº ÀÌ·¯ÇÑ ³×Æ®¿÷ Áö¿ø ±â´É À§¿¡ ±¸ÇöµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥À̱⠶§¹®ÀÔ´Ï´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó°¡ ÀÌ ¾ÖÇø´(Applet Ŭ·¡½º)À» ´Ü¼øÈ÷ Ŭ·¡½º »ó¼ÓÇÏ¿© ¸î °¡Áö ¸Þ¼Òµå¸¸ ±¸ÇöÇØÁÖ¸é ÈǸ¢ÇÏ°Ô ÀÎÅͳÝÀ» °¡·ÎÁú·¯ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÌ µÇ°ï ÇÕ´Ï´Ù.

¿©±â¿¡¼­´Â ÀÌ ¾ÖÇø´µéÀÌ ¹è°æÀ¸·Î »ï°í ÀÖ´Â ±â¹Ý ³×Æ®¿÷ ±â´ÉÀÎ ÀÚ¹ÙÀÇ TCP/IP Áö¿ø ±â´É(¼ÒÄÏ)°ú TCP/IP¿¡ ±â¹ÝÇÑ Àü¼Û ÇÁ·ÎÅäÄÝÀÎ HTTP, FTP µîÀ» ¾Ë¾Æº¾´Ï´Ù.

2.1 URL ÇÁ·Î±×·¡¹Ö

URLÀº Uniform Resource LocatorÀÇ ¸Ó¸®±ÛÀÚ·Î ÀÎÅÍ³Ý »óÀÇ ¾î¶² ¸®¼Ò½ºÀÇ À§Ä¡¸¦ ³ªÅ¸³»´Â ÀÏÁ¾ÀÇ ÁÖ¼Ò Ç¥±âÀÔ´Ï´Ù. URLÀº ±âº»ÀûÀ¸·Î ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝ°ú ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ¼­¹ö ÁÖ¼Ò, ±×¸®°í ¼­¹ö ¾È¿¡¼­ÀÇ ¸®¼Ò½º À§Ä¡ µîÀ¸·Î ±¸¼ºµÇ´Âµ¥, ÀÚ¹Ù´Â ÀÌ·¯ÇÑ URL ¹®ÀÚ¿­À» ´Ù·ç´Â URL Ŭ·¡½º¸¦ java.net ÆÐÅ°Áö¿¡¼­ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.

<±×¸²> URLÀÇ °¢ ±¸¼º ¿ä¼Òµé

À§ ±×¸²Àº URL ¹®ÀÚ¿­ÀÇ °¢ ±¸¼º ¿ä¼ÒµéÀ» º¸¿©ÁÖ´Â ¿¹·Î, URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ °¢ ±¸¼º¿ä¼Ò¸¦ °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù.

// ÁöÁ¤µÈ ¹®ÀÚ¿­ÀÇ URLÀ» °¡Áö´Â URL °´Ã¼¸¦ »ý¼º

URL url = new

URL("http://moon.daewoo.co.kr:80/~yoonforh/java/about.html#post");

// ÇÁ·ÎÅäÄÝ À̸§ Ãâ·Â. http°¡ Ãâ·ÂµË´Ï´Ù.

System.out.println("ÇÁ·ÎÅäÄÝ :"+url.getProtocol( ));

// È£½ºÆ® À̸§ Ãâ·Â. moon.daewoo.co.krÀÌ Ãâ·ÂµË´Ï´Ù.

System.out.println("È£½ºÆ® :"+url.getHost( ));

// Æ÷Æ® ¹øÈ£ Ãâ·Â. À§¿¡¼­Ã³·³ ':80'À» ³Ö¾î ¸í½ÃÀûÀ¸·Î Æ÷Æ®¸¦ ÁöÁ¤ÇÑ °æ¿ì¿¡¸¸

// Á¦´ë·Î °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. Æ÷Æ® ¹øÈ£¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é -1À» ¸®ÅÏÇÕ´Ï´Ù.

// -1ÀÎ °æ¿ì¿¡´Â °¢ ÇÁ·ÎÅäÄÝÀÌ »ç¿ëÇÏ´Â ±âº» Æ÷Æ®·Î °£ÁÖÇÏ°Ô µË´Ï´Ù.

// http ÇÁ·ÎÅäÄÝÀÇ °æ¿ì¿¡´Â 80, ftp ÇÁ·ÎÅäÄÝÀº 23ÀÌ ±âº» Æ÷Æ® ¹øÈ£ÀÔ´Ï´Ù.

System.out.println("Æ÷Æ® ¹øÈ£ :"+url.getPort( ));

// ¸®¼Ò½º À§Ä¡ Ãâ·Â. /~yoonforh/java/about.htmlÀÌ Ãâ·ÂµË´Ï´Ù.

System.out.println("ÆÄÀÏ À̸§ :"+url.getFile( ));

// ¹®¼­ ³»¿¡¼­ÀÇ ÂüÁ¶ À§Ä¡ Ãâ·Â. post°¡ Ãâ·ÂµË´Ï´Ù.

System.out.println("ÂüÁ¶ :"+url.getRef());

ÀÚ¹Ù´Â ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝ Áß http ÇÁ·ÎÅäÄÝ(ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ, ¿ùµå¿ÍÀ̵åÀ¥¿¡¼­ »ç¿ëÇÏ´Â ÇÁ·ÎÅäÄÝ)°ú ftp ÇÁ·ÎÅäÄÝ(ÆÄÀÏ Àü¼Û ÇÁ·ÎÅäÄÝ)À» ±âº» Áö¿øÇÕ´Ï´Ù. µû¶ó¼­ http ÇÁ·ÎÅäÄÝÀ̳ª ftp ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÀÔÃâ·Â ½ºÆ®¸²À» ¿­°í ´Ý´Â °ÍÀº ¾ÆÁÖ ½±½À´Ï´Ù. URL °´Ã¼·ÎºÎÅÍ ÀÔÃâ·Â ½ºÆ®¸²À» ¸¸µé ¶§¿¡´Â URLConnection Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

URLConnection Ŭ·¡½º´Â ÁöÁ¤µÈ URL·Î Á÷Á¢ ¿¬°áÀ» ¼³Á¤ÇÏ¿© ÀÔÃâ·Â ½ºÆ®¸²À» ¸¸µé ¼ö ÀÖ´Â ¸Þ¼ÒµåµéÀ» Á¦°øÇÕ´Ï´Ù. URL °´Ã¼·ÎºÎÅÍ URL ¿¬°áÀ» °ü¸®ÇÏ´Â URLConnection °´Ã¼¸¦ ±¸ÇÏ·Á¸é openConnection( ) ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.

try {

// URL °´Ã¼·ÎºÎÅÍ URL ¿¬°á °ü¸® °´Ã¼ ÀνºÅϽº »ý¼º

URLConnection connection = url.openConnection();

// URL ¿¬°á °ü¸® °´Ã¼·ÎºÎÅÍ ÀÔ·Â ½ºÆ®¸² »ý¼º

InputStream in = connection.getInputStream();

// URL ¿¬°á °ü¸® °´Ã¼·ÎºÎÅÍ Ãâ·Â ½ºÆ®¸² »ý¼º

OutputStream out = connectioin.getOutputStream();

} catch (IOException ie) {

// ¿¹¿Ü ó¸®

}

´ÙÀ½ ¿¹Á¦´Â URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© http ÇÁ·ÎÅäÄÝ È¤Àº ftp ÇÁ·ÎÅäÄÝÀ» ÅëÇØ Á¢±ÙÇÒ ¼ö ÀÖ´Â ÆÄÀÏ ¸®¼Ò½º¸¦ ´Ù¿î·ÎµåÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ÀÔÃâ·Â ¹ÙÀÌÆ® ½ºÆ®¸²À» ¿­¾ú´Ù´Â Á¡À» Á¦¿ÜÇÏ¸é ¾Õ¿¡¼­ ´Ù·é ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥°ú Å©°Ô ´Ù¸¦ °ÍÀÌ ¾ø½À´Ï´Ù. ÇÏÁö¸¸, ÀÌ ÇÁ·Î±×·¥Àº °¡²û À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿©·¯ °³ÀÇ ÆÄÀÏÀ» ¹èÄ¡ ÀÛ¾÷À¸·Î http ȤÀº ftp ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ´Ù¿î·ÎµåÇÏ°íÀÚ ÇÒ ¶§ ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¸é °£´ÜÇÏ°Ô ¹èÄ¡ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

import java.net.*;

import java.io.*;

class URLDownload {

public static void main(String args[]) {

if (args.length<1) {

System.out.println("Usage : java URLDownload URL");

System.out.println("Ex : java URLDownload "

+"http://moon.daewoo.co.kr/~yoonforh/new.gif");

System.exit(1);

}

// ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²ÀÇ ÃʱⰪÀ» ³Î·Î ÇÑ´Ù.

BufferedInputStream in = null;

BufferedOutputStream out = null;

try {

URL url = new URL(args[0]); // URL °´Ã¼ »ý¼º

// URLÀÇ ¸®¼Ò½º ÁÖ¼Ò¿¡¼­ ÆÄÀÏ À̸§¸¸ ÃßÃâÇÑ´Ù.

String filename=url.getFile().substring(url.getFile().lastIndexOf('/')+1);

// ÁöÁ¤µÈ URL·ÎºÎÅÍ ÀÔ·Â ½ºÆ®¸²À» ¿¬´Ù.

in = new BufferedInputStream(url.openStream(), 1024);

out = new BufferedOutputStream(

new FileOutputStream(filename));

byte[] buffer=new byte[1024];

int nRead=0, nWrote=0;

System.out.println(filename+" ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ°í ÀÖ½À´Ï´Ù.");

// ÀÔ·ÂÀÌ -1ÀÏ(have no data to read) ¶§±îÁö °è¼ÓÇؼ­ Àо ÆÄÀÏ·Î ¾´´Ù.

while ((nRead = in.read(buffer, 0, 1024)) >= 0) {

out.write(buffer, 0, nRead);

nWrote+=nRead;

System.out.print("#"); // ÆÄÀÏ ´Ù¿î·Îµå ÁßÀÓÀ» Ç¥½Ã

}

System.out.println();

System.out.println(filename+" ÆÄÀÏ¿¡ "+nWrote+" ¹ÙÀÌÆ®¸¦ ½è½À´Ï´Ù.");

} catch (MalformedURLException mue) {

System.out.println("MalformedURLException: " + mue.getMessage());

} catch (IOException ie) {

System.out.println("IOException: " + ie.getMessage());

}

finally {

try { in.close(); } catch (IOException ie) { }

try { out.close(); } catch (IOException ie) { }

}

}

}

<¿¹Á¦> URL¿¡ ÁöÁ¤µÈ http³ª ftp ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ´Â ÇÁ·Î±×·¥

2.2 ³×Æ®¿÷ ¼ÒÄÏ

¼ÒÄÏÀº ¿ø·¡ Àü±¸³ª Àü±â Ç÷¯±×¸¦ ²È´Â ±â±¸¸¦ ¶æÇÏ´Â ´Ü¾îÀÔ´Ï´Ù. ±×·¸´Ù¸é ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö¿¡¼­ »ç¿ëµÇ´Â ¼ÒÄÏÀº ¾î¶² Àǹ̸¦ °¡Áú±î¿ä? ³×Æ®¿÷¿¡µµ ¹«¾ùÀΰ¡ Ç÷¯±×¿Í ¼ÒÄÏ °°ÀÌ ¿¬°áÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù´Â ¶æÀϱî¿ä?

³×Æ®¿÷À» ÅëÇÏ¿© µÎ °³ÀÇ ÇÁ·Î±×·¥ÀÌ ¼­·Î ¿¬°áµÇ·Á¸é ´ÙÀ½ ¿ä¼ÒµéÀÌ °®Ãß¾îÁ®¾ß ÇÕ´Ï´Ù.

¨ç Åë½Å ÇÁ·ÎÅäÄÝ : ¿¬°áµÉ µÎ ÇÁ·Î±×·¥ÀÌ ¼­·Î Åë½ÅÇÒ ¶§ »ç¿ëÇÒ ±Ô¾à.

Åë½Å ÇÁ·ÎÅäÄÝ¿¡´Â ¸ÕÀú ¿¬°áÀ» ±¸¼ºÇÑ ´ÙÀ½ µ¥ÀÌÅ͸¦ ÁÖ°í¹Þ´Â ¿¬°áÇü ÇÁ·ÎÅäÄÝ(TCP ÇÁ·ÎÅäÄÝ)°ú ¿¬°áÀ» ±¸¼ºÇÏÁö ¾Ê°í µ¥ÀÌÅ͸¦ ÁÖ°í¹Þ´Â ºñ¿¬°áÇü ÇÁ·ÎÅäÄÝ(UDP ÇÁ·ÎÅäÄÝ)ÀÌ ÀÖ½À´Ï´Ù. ÀÚ¹Ù¿¡¼­´Â java.net ÆÐÅ°ÁöÀÇ Socket, ServerSocket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ¿¬°áÇü Åë½ÅÀ» Áö¿øÇÏ°í, DatagramSocket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ºñ¿¬°áÇü Åë½ÅÀ» Áö¿øÇÕ´Ï´Ù.

¨è,¨é Áö¿ª°ú ¿ø°ÝÁöÀÇ È£½ºÆ® ÁÖ¼Ò : ÇÑÂÊ È£½ºÆ®ÀÇ ³×Æ®¿÷ ÁÖ¼Ò.

È£½ºÆ® ÁÖ¼Ò´Â ¾ÕÀÇ URL¿¡¼­ º¸¾ÒµíÀÌ ¸¶Ä§Ç¥(.)·Î ±¸ºÐµÇ´Â ¿©·¯ ´Ü°èÀÇ ¹®ÀÚ¿­·Î Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦ ³×Æ®¿÷ ÁÖ¼Ò´Â ÀÌ ¹®ÀÚ¿­À» ³× ´Ü°èÀÇ Á¤¼ö°ªÀ¸·Î º¯È¯ÇÏ¿© ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î moon.daewoo.co.krÀ̶õ È£½ºÆ® À̸§Àº ½ÇÁ¦·Î´Â 165.133.1.5¶ó´Â ³× ´Ü°èÀÇ Á¤¼ö°ªÀ» °¡Áø ³×Æ®¿÷ ÁÖ¼Ò·Î º¯È¯µË´Ï´Ù.

¨ê,¨ë Áö¿ª°ú ¿ø°ÝÁöÀÇ ÇÁ·Î¼¼½º : È£½ºÆ® ¾È¿¡¼­ ½ÇÇàµÇ´Â ÇÁ·Î¼¼½º¸¦ ÁöÁ¤.

º¸Åë Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º¸¦ ÁöÁ¤ÇÏ°Ô µË´Ï´Ù. URL¿¡¼­ Àá½Ã ¼³¸íÇßÁö¸¸ http ÇÁ·ÎÅäÄÝÀº 80, ftp ÇÁ·ÎÅäÄÝÀº 23°ú °°ÀÌ °¢ ÇÁ·Î¼¼½º(¼­ºñ½º)°¡ »ç¿ëÇÒ Æ÷Æ® ¹øÈ£°¡ ÁöÁ¤µË´Ï´Ù. »ç¿ëÀÚ°¡ Æ÷Æ® ¹øÈ£¸¦ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡ ºÎ¿©ÇÒ ¶§¿¡´Â 1024 ÀÌ»óÀÇ °ªÀ» Áà¾ß ÇÏ°í ÀÚ½ÅÀÇ È£½ºÆ®¿¡¼­ ½ÇÇàµÇ´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿Í Æ÷Æ®¹øÈ£°¡ Áߺ¹µÇÁö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù.

¿¬°áÀ» ±¸¼ºÇÏ´Â ´Ù¼¸ °¡Áö ¿ä¼Ò Áß ÇÑÂÊ È£½ºÆ®¿¡¼­ ÁöÁ¤ÇØ¾ß ÇÏ´Â ºÎºÐÀÎ ¨ç Åë½Å ÇÁ·ÎÅäÄÝ, ¨è Áö¿ª È£½ºÆ® ÁÖ¼Ò, ¨é Áö¿ª ÇÁ·Î¼¼½º ¼¼ °¡Áö ¿ä¼Ò¸¦ ÈçÈ÷ Àü¼Û ÁÖ¼Ò È¤Àº ¼ÒÄÏÀ̶ó°í ºÎ¸¨´Ï´Ù. Áï, ¼ÒÄÏÀº ³×Æ®¿÷¿¡¼­ ¿¬°áÀ» ±¸¼ºÇϱâ À§ÇÑ ÇÑÂÊ ³¡À» ¶æÇÏ´Â °³³äÀ¸·Î »ç¿ëµÇ´Â °ÍÀÔ´Ï´Ù. ³×Æ®¿÷ ÇÁ·Î±×·¡¹ÖÀÇ ¼ÒÄÏ¿¡´Â ±¸¼ºµÈ ÇÑÂÊ ³¡°ú ´Ù¸¥ÂÊ ³¡À» ¼­·Î °øÀ¯ÇÏ´Â Åë½Å ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ¿¬°áÇϱ⸸ ÇÏ¸é ³×Æ®¿÷ ¿¬°áÀÌ ±¸¼ºµÈ´Ù´Â Àǹ̰¡ ¼û¾î ÀÖ´Â °ÍÀÔ´Ï´Ù.

2.3 ¼­¹ö/Ŭ¶óÀ̾ðÆ® Åë½Å ¸ðµ¨

¼ÒÄÏÀ» »ç¿ëÇÑ ÇÁ·Î±×·¥Àº º¸Åë ¼­¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À̶ó°í ÇÏ´Â ³×Æ®¿÷ Åë½Å ¸ðµ¨À» »ç¿ëÇÏ°Ô µË´Ï´Ù. ¼­¹ö´Â ³×Æ®¿÷ ¿¬°á ¿äûÀ» ±â´Ù¸®´Â ÇÁ·Î¼¼½ºÀ̸ç Ŭ¶óÀ̾ðÆ®´Â ³×Æ®¿÷ ¿¬°áÀ» ¿äûÇÏ´Â ÇÁ·Î¼¼½º¸¦ ¶æÇÕ´Ï´Ù.

¼­¹ö ÇÁ·Î¼¼½º´Â ƯÁ¤ÇÑ Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÏ¿© ÀÚ½ÅÀÇ È£½ºÆ®¿¡¼­ ¿¬°áÀÇ ¹ÝÀ» ÀǹÌÇÏ´Â ¼ÒÄÏÀ» ¿­¾îµÎ°í ´©±º°¡°¡ ÀÌ Æ÷Æ® ¹øÈ£·Î Á¢¼ÓÇØ¿Ã ¶§±îÁö ±â´Ù¸³´Ï´Ù.

Ŭ¶óÀ̾ðÆ® ÇÁ·Î¼¼½º´Â ¼­¹ö ÇÁ·Î¼¼½º°¡ Àִ ȣ½ºÆ®ÀÇ ÁÖ¼Ò¿Í ¼­¹ö ÇÁ·Î¼¼½º°¡ »ç¿ëÇϴ ƯÁ¤ Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÏ¿© ¼­¹ö ÇÁ·Î¼¼½º¿¡°Ô ¿¬°áÀ» ¿äûÇÕ´Ï´Ù.

ÀÚ¹Ù¿¡¼­ ¼­¹ö ÇÁ·Î¼¼½ºÀÇ ±âº» ¿ªÇÒÀº ServerSocket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖÀ¸¸ç Ŭ¶óÀ̾ðÆ® ÇÁ·Î¼¼½ºÀÇ ±âº» ¿ªÇÒÀº Socket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½ ±×¸²Àº ÀÚ¹Ù¿¡¼­ ¿¬°áÇü(TCP) ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ¼­¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À» ±¸¼ºÇÒ ¶§ÀÇ ±âº» Åë½Å ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

<±×¸²> ÀÚ¹ÙÀÇ ¿¬°áÇü ¼­¹ö/Ŭ¶óÀ̾ðÆ® Åë½Å ¸ðµ¨

2.3.1 ¼­¹ö ÇÁ·Î±×·¥ÀÇ °ñ°Ý ±¸Çö

À§ ±×¸²ÀÇ ¼­¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨¿¡ µû¶ó ¼­¹ö ÇÁ·Î±×·¥ÀÇ °ñ°ÝÀ» Àâ¾Æº¸µµ·Ï ÇÕ´Ï´Ù.

¸ÕÀú ƯÁ¤ÇÑ Æ÷Æ®¸¦ »ç¿ëÇÏ´Â ¼­¹ö ¼ÒÄÏ °´Ã¼¸¦ »ý¼ºÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ ÇØ´ç Æ÷Æ®·Î Á¢¼ÓÇØ¿À±â¸¦ ±â´Ù·Á¾ß ÇÕ´Ï´Ù.

// ¸ÕÀú ÁöÁ¤µÈ Æ÷Æ®·Î ¼­¹ö ¼ÒÄÏÀ» »ý¼º

ServerSocket server = null;

int port = 7001; // ƯÁ¤ÇÑ Æ÷Æ® ¹øÈ£

try {

server = new ServerSocket(port);

} catch (IOException ie) {

System.err.println("Cannot create server socket:"+ie.toString( ));

}

ÀϹÝÀûÀÎ °æ¿ì ÇϳªÀÇ ¼­¹ö ¼ÒÄÏÀº ¿©·¯ °³ÀÇ Å¬¶óÀ̾ðÆ® Á¢¼ÓÀ» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ±¸ÇöµË´Ï´Ù.

ÀÏ´Ü ¼­¹ö ¼ÒÄÏÀ» »ý¼ºÇϸé accept( ) ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇØ¿Ã ¶§±îÁö ±â´Ù¸®´Ù°¡, ÀÏ´Ü Á¢¼ÓÀÌ µÇ¸é accept( ) ¸Þ¼ÒµåÀÇ ¸®ÅÏ °ªÀÎ »õ·Î¿î ¼ÒÄÏ °´Ã¼¸¦ »ç¿ëÇÏ¿© Á¢¼ÓµÈ Ŭ¶óÀ̾ðÆ®¿Í Åë½ÅÀ» ÇÏ¸é µË´Ï´Ù.

// ¹«ÇÑ ¹Ýº¹¹®À» µ¹¸é¼­ Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇØ¿À¸é °¢ Ŭ¶óÀ̾ðÆ®º°·Î

// ¿¬°áÀ» »ý¼ºÇÏ¿© ÁöÁ¤ÇÑ ÀÏÀ» ÇÑ ÈÄ ¿¬°áÀ» ´Ý½À´Ï´Ù.

while (true) {

Socket socket = null;

try {

// Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇØ¿Ã ¶§±îÁö ¹«ÇÑÈ÷ ±â´Ù¸³´Ï´Ù.

// Ŭ¶óÀ̾ðÆ®¿Í ¿¬°áµÇ¸é »õ·Î¿î ¼ÒÄÏ °´Ã¼°¡ ¸®Åϵ˴ϴÙ.

socket = server.accept();

// doSomething( ) ¸Þ¼Òµå´Â ½ÇÁ¦ Åë½ÅÀ» ÇÏ´Â ¸Þ¼ÒµåÀÔ´Ï´Ù.

doSomething(socket);

} catch (IOException ie) {

System.err.println("IOException:"+ie.getMessage( ));

} finally {

try { socket.close(); } catch (IOException ie) { }

}

}

º¸Åë doSomething( ) ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®¿Í ½ÇÁ¦·Î Åë½ÅÀ» ÇÏ´Â ºÎºÐÀ¸·Î ÀÚ¹Ù¿¡¼­´Â ¼ÒÄÏ °´Ã¼·ÎºÎÅÍ ÀÔ·Â ¹× Ãâ·Â ½ºÆ®¸² °´Ã¼¸¦ ±¸ÇÏ¿© Åë½ÅÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù.

InputStream in = socket.getInputStream( );

OutputStream out = socket.getOutputStream( );

2.3.2 Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ °ñ°Ý ±¸Çö

Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â ¼­¹öÀÇ °æ¿ìº¸´Ù Á»´õ °£´ÜÇÑ °ñ°ÝÀ» °¡Áú °ÍÀÔ´Ï´Ù.

¸ÕÀú Socket Ŭ·¡½º »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿© ¼­¹ö°¡ ÀÖ´Â ¿ø°Ý È£½ºÆ®ÀÇ Æ¯Á¤ Æ÷Æ®¿¡ Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù. º°´Ù¸¥ ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾Ê°í »ý¼ºÀÚ°¡ ¸®ÅÏµÇ¸é ¿¬°áÀÌ ÀÌ·ç¾îÁø °ÍÀ̹ǷΠ»ý¼ºµÈ ¼ÒÄÏ °´Ã¼¸¦ »ç¿ëÇÏ¿© ¼­¹ö¿Í Åë½ÅÇÏ¸é µË´Ï´Ù.

// ¸ÕÀú ÁöÁ¤µÈ È£½ºÆ® ÁÖ¼Ò¿Í Æ÷Æ®·Î ¼ÒÄÏÀ» »ý¼ºÇÕ´Ï´Ù.

Socket socket = null;

String host = "moon.daewoo.co.kr"; // ¼­¹ö°¡ ÀÖ´Â ¿ø°Ý È£½ºÆ® ÁöÁ¤

int port = 7001; // ¼­¹ö°¡ »ç¿ëÇϴ ƯÁ¤ Æ÷Æ® ¹øÈ£ ÁöÁ¤

try {

socket = new Socket(host, port);

// doSeveralThings() ¸Þ¼Òµå´Â ¼­¹ö¿Í ¾à¼ÓÇß´ø ÀÏÀ» ÇÒ °ÍÀÔ´Ï´Ù.

doSeveralThings(socket);

} catch (UnknownHostException uhe) { // È£½ºÆ® ÁÖ¼Ò¸¦ ÀÌÇØÇÒ ¼ö ¾øÀ» ¶§

System.err.println("Unknown host:"+uhe.getMessage());

} catch (IOException ie) {

System.err.println("IOException:"+ie.getMessage());

} finally {

try { socket.close(); } catch (IOException ie) { }

}

2.4 ºê·Îµåij½ºÆ® ¼­¹ö/Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ±¸Çö

¼­¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À» ±¸ÇöÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥À» ½ÇÁ¦·Î ÀÛ¼ºÇغ¾½Ã´Ù. ºê·Îµåij½ºÆ® ¼­¹ö´Â ¿©·¯ °³ÀÇ Å¬¶óÀ̾ðÆ®¿Í µ¿½Ã¿¡ ¿¬°áµÇ¸é¼­ °¢ Ŭ¶óÀ̾ðÆ® °£ÀÇ Åë½ÅÀ» Áß°³ÇÏ´Â ±â´ÉÀ» °¡Áý´Ï´Ù. ¼­¹ö´Â ¾î´À ÇÑ Å¬¶óÀ̾ðÆ®°¡ ¸Þ½ÃÁö¸¦ º¸³»¸é ÀÌ ¸Þ½ÃÁö¸¦ ÇöÀç Á¢¼ÓµÈ ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â ÀÏÀ» ÇÕ´Ï´Ù.

Ŭ¶óÀ̾ðÆ®´Â »ç¿ëÀÚ°¡ ÅؽºÆ®Çʵ忡 ÀÔ·ÂÇÑ ³»¿ëÀ» ¼­¹ö·Î º¸³»¸ç ¶Ç, ¼­¹ö·ÎºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö¸¦ ÅؽºÆ®¿¡¸®¾î¿¡ µð½ºÇ÷¹ÀÌÇÏ´Â ¾ÖÇø´À¸·Î ±¸ÇöÇغ¸µµ·Ï ÇÕ´Ï´Ù.

2.4.1 ºê·Îµåij½ºÆ® ¼­¹ö ÇÁ·Î±×·¥

ºê·Îµåij½ºÆ® ¼­¹ö´Â ¿©·¯ ¸íÀÇ Å¬¶óÀ̾ðÆ®°¡ µ¿½Ã¿¡ Á¢¼ÓÇÒ ¼ö ÀÖÀ¸¸ç ÇöÀç Á¢¼ÓÀÌ À¯ÁöµÇ°í Àִ Ŭ¶óÀ̾ðÆ® ¸ñ·ÏÀ» ³»ºÎÀûÀ¸·Î °¡Áö°í ÀÖ´Ù°¡ ¾î´À Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¸Þ½ÃÁö°¡ µµÂøÇϸé Ŭ¶óÀ̾ðÆ® ¸ñ·Ï¿¡ ÀÖ´Â ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ÇØ´ç ¸Þ½ÃÁö¸¦ º¸³»¾ß ÇÕ´Ï´Ù. ÀÌ ¶§ Ŭ¶óÀ̾ðÆ®µéÀÇ ¸ñ·ÏÀ» °ü¸®Çϱâ À§ÇØ java.util ÆÐÅ°ÁöÀÇ Vector Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Vector Ŭ·¡½º´Â Å©±â°¡ º¯ÇÒ ¼ö ÀÖ´Â °´Ã¼ ¹è¿­À» À§ÇØ ÁÖ·Î »ç¿ëµÇ´Âµ¥ ¹è¿­ÀÌ °´Ã¼¿Í ±âº» ÀÚ·áÇü ¸ðµÎ¿¡ »ç¿ëµÉ ¼ö ÀÖ´Â µ¥ ºñÇØ Vector Ŭ·¡½º´Â °´Ã¼¿¡¸¸ »ç¿ëµÉ ¼ö ÀÖ°í ±× Å©±â°¡ ÀÚµ¿À¸·Î º¯ÇÑ´Ù´Â Á¡¿¡¼­ ¹è¿­°ú ´Ù¸¨´Ï´Ù.

Vector Ŭ·¡½º µî¿¡ µî·ÏµÈ °´Ã¼µéÀ» Â÷·Ê·Î ¼øȸÇÏ´Â µ¥ À¯¿ëÇÑ ÀÎÅÍÆäÀ̽º·Î EnumerationÀÌ Àִµ¥ Enumeration ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© Vector Ŭ·¡½º¿¡ µî·ÏµÈ String °´Ã¼µéÀ» Â÷·Ê·Î Ãâ·ÂÇÏ·Á¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù.

Vector vector=new Vector(); // º¤ÅÍ »ý¼º

... // º¤ÅÍÀÇ ¿ø¼ÒµéÀ» Ãß°¡ÇÏ´Â ºÎºÐ

for (Enumeration e = vector.elements(); e.hasMoreElements() ; ) {

System.out.println((String) e.nextElement());

}

ºê·Îµåij½ºÆ® ¼­¹ö´Â ÀϹÝÀûÀÎ ¼ÒÄÏ ¼­¹öÀÇ °ñ°ÝÀ» ±×´ë·Î °¡Áö¸ç, Á¢¼ÓÇÑ Å¬¶óÀ̾ðÆ®º°·Î ¾²·¹µå¸¦ »ý¼ºÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ¸Þ½ÃÁö¸¦ º¸³¾ ¶§±îÁö ±â´Ù·È´Ù°¡, ¸Þ½ÃÁö°¡ µµÂøÇÏ¸é ±× ¸Þ½ÃÁö¸¦ ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ºê·Îµåij½ºÆ®ÇÏ°Ô µË´Ï´Ù.

import java.io.*;

import java.net.*;

import java.util.*;

class BroadcastServer

{

final static int PORT = 8001;

ServerSocket server = null;

Vector clients = new Vector();

// ³»ºÎ Ŭ·¡½º·Î ¼±¾ðµÈ Client Ŭ·¡½º. °¢ Ŭ¶óÀ̾ðÆ®°ú Á¢¼ÓÀÌ ÀÌ·ç¾îÁø ¼ÒÄÏÀ» °ü¸®Çϸç

// Ŭ¶óÀ̾ðÆ®¸¶´Ù º°µµÀÇ ¾²·¹µå·Î ÀÌ·ç¾îÁý´Ï´Ù.

class Client extends Thread {

Socket socket = null;

BufferedReader in = null;

PrintWriter out = null;

// »ý¼ºÀÚ

Client (Socket socket) throws IOException {

this.socket = socket;

this.in = new BufferedReader(

new InputStreamReader(socket.getInputStream()));

this.out = new PrintWriter(

new OutputStreamWriter(socket.getOutputStream()),

true /* ÀÚµ¿ Ç÷¯½Ã ¸ðµå */);

start(); // Á¢¼ÓÀÌ ÀÌ·ç¾îÁø Ŭ¶óÀ̾ðÆ®¸¦ ó¸®ÇÒ ¾²·¹µå¸¦ ½ÇÇà½Ãŵ´Ï´Ù.

}

public void run() {

try {

while (true) {

// readLine()Àº µ¥ÀÌÅÍ°¡ µé¾î¿Ã ¶§±îÁö ±â´Ù¸®´Â

// ºí·ÎÅ· ¸Þ¼ÒµåÀÔ´Ï´Ù.

String line = in.readLine();

if (line == null) { // ³Î °ªÀº ½ºÆ®¸²ÀÇ ³¡À» °¡¸®Åµ´Ï´Ù.

close();

break;

}

// ¼­¹öÀÇ Ç¥ÁØ Ãâ·ÂÀ¸·Î ¸Þ½ÃÁö Ãâ·Â

System.out.println(getName()+':'+line);

// ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸Þ½ÃÁö ºê·Îµåij½ºÆ®

BroadcastServer.this.broadcast(line);

}

} catch (IOException ie) {

System.err.println(getName()+":IOException. "+ie.getMessage());

close();

}

}

public void close() {

synchronized (BroadcastServer.this) {

try { if (in!=null) in.close(); } catch (Exception e) { }

if (out!=null) out.close();

try { if (socket!=null) socket.close(); } catch (Exception e) { }

socket=null;

}

}

}

public BroadcastServer() {

// ¸ÕÀú ÁöÁ¤µÈ Æ÷Æ®·Î ¼­¹ö ¼ÒÄÏÀ» »ý¼ºÇÕ´Ï´Ù.

try {

server = new ServerSocket(PORT);

} catch (IOException ie) {

System.err.println("Cannot create server socket");

System.exit(1);

}

while (true) { // ¹«ÇÑ ¹Ýº¹¹® ¾È¿¡¼­ Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀ» ±â´Ù¸³´Ï´Ù.

try {

Socket socket = server.accept();

// Ŭ¶óÀ̾ðÆ®¸¦ ó¸®ÇÒ º°µµ ¾²·¹µå¸¦ »ý¼ºÇÏ°í

// Ŭ¶óÀ̾ðÆ®¸¦ º¤ÅÍ Å¬·¡½º¿¡ Ãß°¡ÇÕ´Ï´Ù.

Client client = new Client(socket);

synchronized (this) {

clients.addElement(client);

}

} catch (IOException ie) {

System.err.println("IOException :"+ie.getMessage());

}

}

}

public static void main(String args[]) {

new BroadcastServer();

}

// ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸Þ½ÃÁö¸¦ ºê·Îµåij½ºÆ®ÇÏ´Â ¸Þ¼Òµå

private synchronized void broadcast(String message) {

Vector v = new Vector(); // Áö¿ï Ŭ¶óÀ̾ðÆ®¸¦ Àá½Ã ÀúÀå

for (Enumeration enum=clients.elements();

enum.hasMoreElements(); )

{

Client client = (Client) enum.nextElement();

if (client == null)

continue;

if (client.socket == null) { // ¼ÒÄÏÀÌ ÀÌ¹Ì ´Ý±ä °æ¿ì

v.addElement(client); // enumerate ÁßÀ̹ǷΠ³ªÁß¿¡ Áö¿ì±â À§ÇØ ÀúÀå

continue;

}

client.out.println(message);

if (client.out.checkError()) { // ¿¡·¯ °Ë»ç

System.err.println("Error while sending message.");

client.close();

}

}

// ¿©±â¿¡¼­ »èÁ¦ÇÒ ¸ñ·ÏÀ» ½ÇÁ¦·Î »èÁ¦

for (Enumeration enum = v.elements();

enum.hasMoreElements(); )

{

Client client = (Client) enum.nextElement();

clients.removeElement(client);

}

}

}

<¿¹Á¦> ºê·Îµåij½ºÆ® ¼­¹ö ÇÁ·Î±×·¥

2.4.2 ºê·Îµåij½ºÆ® Ŭ¶óÀ̾ðÆ® ¾ÖÇø´

ºê·Îµåij½ºÆ® ¾ÖÇø´Àº ÀϹÝÀûÀÎ ¼ÒÄÏ Å¬¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ ±¸Á¶¸¦ Å©°Ô ¹þ¾î³ªÁö ¾Ê½À´Ï´Ù. ´Ù¸¸ ¾ÖÇø´À¸·Î ±¸ÇöÇÒ °ÍÀ̱⠶§¹®¿¡ °í·ÁÇØ¾ß ÇÒ ¹®Á¦¸¦ ¤°í ³Ñ¾î°¡µµ·Ï ÇÕ´Ï´Ù. ÀÌÀü È£¿¡¼­ ¾ÖÇø´À» ´Ù·ê ¶§ ¾ð±ÞÇß¾úÁö¸¸ Àß ±â¾ï³ªÁö ¾Ê´Â µ¶ÀÚµéÀ» À§ÇØ »ó±â½ÃÅ°ÀÚ¸é "¾ÖÇø´ ¹ÙÀÌÆ®Äڵ尡 Àִ ȣ½ºÆ® ÀÌ¿ÜÀÇ È£½ºÆ®¿ÍÀÇ ³×Æ®¿÷ Á¢¼Ó"Àº ±âº»°ªÀ¸·Î ±ÝÁöµÇ¾î ÀÖ½À´Ï´Ù.

½±°Ô ¸»ÇÏÀÚ¸é ¾ÖÇø´ÀÌ À§Ä¡ÇÏ°í ÀÖ´Â À¥ ¼­¹ö ÀÌ¿ÜÀÇ È£½ºÆ®¿Í´Â ³×Æ®¿÷À¸·Î Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ù½Ã ¸»Çؼ­ ¾ÖÇø´°ú Á¢¼ÓÇÒ ¼ÒÄÏ ¼­¹ö´Â ¾ÖÇø´ÀÌ À§Ä¡ÇÑ À¥ ¼­¹ö¿Í °°Àº È£½ºÆ®¿¡¼­ ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù. ¹°·Ð ¾ÖÇø´À» ÀÏ¹Ý ÀÀ¿ë ÇÁ·Î±×·¥Ã³·³ º¸¾È Á¦¾à ¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾ÖÇø´ ¼­¸íÀ̶õ ±â¼úÀ» »ç¿ëÇϰųª ÀÚ¹Ù 2¿¡ Ãß°¡µÈ ÆÛ¹Ì¼Ç ÁöÁ¤ ±â´ÉÀ» ¾²¸é ´Ù¸¥ È£½ºÆ®¿ÍÀÇ ¼ÒÄÏ Á¢¼Óµµ °¡´ÉÇÏÁö¸¸, ¹ø°Å·Î¿î ÀÏÀÏ °ÍÀÔ´Ï´Ù. ¿©±â¿¡¼­´Â ¾ÖÇø´ÀÌ Á¸ÀçÇϴ ȣ½ºÆ®¿¡ ¼ÒÄÏ Á¢¼ÓÇÏ´Â °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù.

¾ÖÇø´ Ŭ·¡½ºÀÇ getCodeBase() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ¾ÖÇø´ÀÌ À§Ä¡ÇÑ À¥ ¼­¹öÀÇ È£½ºÆ® À̸§À» ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.

String hostname = getCodeBase().getHost();

´ÙÀ½Àº ºê·Îµåij½ºÆ® ¼­¹ö¿¡ Á¢¼ÓÇÒ Å¬¶óÀ̾ðÆ® ¾ÖÇø´ ÇÁ·Î±×·¥ ÄÚµåÀÔ´Ï´Ù. Ư±âÇÒ °ÍÀº º°µµÀÇ ¾²·¹µå¸¦ »ç¿ëÇÏ¿© ¼­¹ö°¡ º¸³»´Â ¸Þ½ÃÁö¸¦ Àоîµé¿© ÅؽºÆ®¿¡¸®¾î¿¡ µð½ºÇ÷¹ÀÌÇÏ´Â ÀÏÀ» Àü´ã½ÃÅ°°í ÀÖ´Ù´Â Á¡ÀÔ´Ï´Ù.

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

import java.net.*;

import java.io.*;

public class BroadcastApplet extends Applet implements ActionListener

{

int port;

String host;

TextField inputField;

TextArea outputArea;

Socket socket;

BufferedReader in;

PrintWriter out;

Thread readingThread;

public void init() {

// ÄÄÆ÷³ÍÆ® ·¹À̾ƿô, ¹èÄ¡

inputField = new TextField();

outputArea = new TextArea();

setLayout(new BorderLayout());

add(inputField, "North");

add(outputArea, "Center");

String param=getParameter("PORT");

if (param==null)

port = 8001; // ±âº» Æ÷Æ® ¹øÈ£

else

port = Integer.parseInt(param);

host=getParameter("HOST");

if (host==null) // ±âº» È£½ºÆ®´Â ¾ÖÇø´ÀÌ Á¸ÀçÇϴ ȣ½ºÆ®

host = getCodeBase().getHost();

inputField.addActionListener(this);

validate();

}

public void start() {

if (socket == null)

connect();

readingThread = new Thread() {

public void run() {

if (socket == null)

return;

while (socket!=null &&

readingThread==Thread.currentThread()) {

try {

// readLine() ¸Þ¼Òµå´Â ¼­¹ö·ÎºÎÅÍ

// ÀÔ·ÂÀÌ ÀÖÀ» ¶§±îÁö ºí·ÎÅ·µÈ´Ù.

String line = in.readLine();

appendLine(line);

} catch (IOException ie) {

appendLine("IOException:"+ie.getMessage());

closeSocket();

}

}

}

};

readingThread.start();

}

public void stop() {

readingThread=null;

closeSocket();

}

public void actionPerformed(ActionEvent ae) {

if (ae.getSource() instanceof TextField) {

String line = inputField.getText();

inputField.setText(""); // ÅؽºÆ®¿¡¸®¾î¸¦ Áö¿ó´Ï´Ù.

if (socket == null)

return;

try {

out.println(line);

if (out.checkError())

throw new IOException("Print error.");

} catch (IOException ie) {

closeSocket();

}

}

}

public void connect() {

try {

socket = new Socket(host, port);

in = new BufferedReader(

new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(

new OutputStreamWriter(socket.getOutputStream()),

true /* ÀÚµ¿ Ç÷¯½Ã ¸ðµå */);

appendLine("Connected...");

} catch (UnknownHostException uhe) {

appendLine("Unknown host:"+uhe.getMessage());

} catch (IOException ie) {

appendLine("IOException:"+ie.getMessage());

}

}

public synchronized void closeSocket() {

try { if (in != null) in.close(); } catch (Exception e) { }

if (out != null) out.close();

try { if (socket != null) socket.close(); } catch (Exception e) { }

socket = null;

}

public synchronized void appendLine(String message) {

outputArea.append(message+"\n");

}

}

<¿¹Á¦> ºê·Îµåij½ºÆ® Ŭ¶óÀ̾ðÆ® ¾ÖÇø´ ÇÁ·Î±×·¥

Ŭ¶óÀ̾ðÆ® ¾ÖÇø´ ½ÇÇàÀ» À§ÇÑ HTML ¹®¼­´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» Æ÷ÇÔÇÏ¸é µË´Ï´Ù.

<APPLET CODE=BroadcastApplet WIDTH=200 HEIGHT=200>

<PARAM NAME="PORT" VALUE=8001>

<PARAM NAME="HOST" VALUE="127.0.0.1">

</APPLET>

<±×¸²> ºê·Îµåij½ºÆ® ¼­¹ö/Ŭ¶óÀ̾ðÆ® ½ÇÇà ¸ð½À

³×Æ®¿÷ ÇÁ·Î±×·¡¹ÖÀº ¾à¼ÓÀ» Áß½ÃÇÏ´Â ÇÁ·Î±×·¡¹Ö ºÐ¾ßÀÔ´Ï´Ù. ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® °£ÀÇ ´ëÈ­¿¡´Â ÀÏÁ¤ÇÑ ±Ô¾àÀÌ ÀÖ¾î À̸¦ ÁöÅ°Áö ¾ÊÀ» °æ¿ì, ¿¡·¯ »óȲÀ¸·Î ºüÁöµµ·Ï ¼³°èµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ô¾à ȤÀº ¾à¼ÓÀ» ÈçÈ÷ ÇÁ·ÎÅäÄÝÀ̶ó°í ºÎ¸¨´Ï´Ù. ¼­¹ö/Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ÇÁ·ÎÅäÄÝÀ» ºÐ¸íÇÏ°í È¿À²ÀûÀ¸·Î, ¶Ç ´Ù¾çÇÑ »óȲÀ» °í·ÁÇÏ¿© ¼³°èÇØ¾ß ÈǸ¢ÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

ºê·Îµåij½ºÆ® ¼­¹ö/Ŭ¶óÀ̾ðÆ®´Â Á¶±ÝÀÇ ±Ô¾àÀ» Ãß°¡Çϸé äÆà ¼­¹ö/Ŭ¶óÀ̾ðÆ®·Î ¹ßÀü½Ãų ¼ö ÀÖ½À´Ï´Ù. Á÷Á¢ µµÀüÇغ¸±â ¹Ù¶ø´Ï´Ù.

Çѱ¹ ·ÎĶ·Î ½Ã°£ Ç¥ÇöÇϱâ

·ÎĶ(locale)Àº ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â ȯ°æ Áß Áö¿ª°ú ¾ð¾î¿¡ °üÇÑ Á¤º¸¸¦ ¶æÇÕ´Ï´Ù. Áï, ´ëÇѹα¹À̶ó´Â Áö¿ª¿¡ ´ëÇÑ Á¤º¸¿Í ÇѱÛÀ̶ó´Â ¾ð¾î¿¡ ´ëÇÑ Á¤º¸¸¦ ¸»ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ·ÎĶ Á¤º¸¸¦ Ç¥ÇöÇÏ´Â java.util ÆÐÅ°ÁöÀÇ Locale Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. ¿ì¸®°¡ º¸Åë »ç¿ëÇÏ´Â ·ÎĶÀº ´ëÇѹα¹À̶ó´Â Áö¿ªÀÇ Ãø¸é¿¡¼­ º¸¸é Locale.KOREAÀÌ°í ÇѱÛÀ̶ó´Â ¾ð¾îÀÇ Ãø¸é¿¡¼­ º¸¸é Locale.KOREANÀÔ´Ï´Ù. LocaleÀÇ »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿© ¿ì¸®°¡ »ç¿ëÇÏ´Â ·ÎĶÀ» Ç¥ÇöÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Locale myLocale = new Locale("ko", "KR");

·ÎĶ »ý¼ºÀÚÀÇ ÀÎÀÚ·Î ÁÖ¾îÁö´Â ¾ð¾î°ª°ú Áö¿ª°ªÀº ±¹Á¦ Ç¥ÁØÈ­ ±â±¸ÀÎ ISO¿¡ ÀÇÇØ Á¤ÇØÁ® ÀÖ½À´Ï´Ù. ÇѱÛÀº "ko", ´ëÇѹα¹Àº "KR"·Î ÁöÁ¤µÇ¾î ÀÖ½À´Ï´Ù.

·ÎĶÀÌ ´Þ¶óÁö¸é ³¯Â¥¿Í ½Ã°£, µµ·®ÇüÀ» Ç¥ÇöÇÏ´Â ¹æ½ÄÀÌ ´Þ¶óÁý´Ï´Ù. ÀÌ·¸°Ô ·ÎĶ¸¶´Ù ´Ù¸¥ ¹æ½ÄÀ¸·Î ³¯Â¥, ½Ã°£, µµ·®Çü µîÀ» Ç¥½ÃÇÏ´Â ±â´ÉÀ» ´ã´çÇÏ´Â Àڹ٠Ŭ·¡½ºµéÀº ´ëºÎºÐ java.text ÆÐÅ°Áö¿¡ µé¾î ÀÖ½À´Ï´Ù. ÇÑ ¿¹·Î ³¯Â¥¿Í ½Ã°£À» Ç¥ÇöÇÏ´Â DateFormat Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ÀÔ¸À¿¡ ¸Â´Â ¼­½ÄÀ¸·Î ½Ã°£À» Ç¥ÇöÇغ¾½Ã´Ù. java.text ÆÐÅ°Áö¿¡ ÀÖ´Â FormatÀ¸·Î ³¡³ª´Â À̸§ÀÇ Å¬·¡½ºµéÀº º¸Åë ·ÎĶ¿¡ ÀÇÁ¸ÇÏ´Â Á¤º¸ÀÇ Çü½ÄµéÀ» ¼­½ÄÈ­ÇØÁִ Ŭ·¡½ºµé·Î format() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ¼­½ÄÈ­µÈ ¹®ÀÚ¿­À» ¸¸µå´Â µ¥ »ç¿ëµË´Ï´Ù.

´ÙÀ½Àº ÇöÀçÀÇ ±âº» ·ÎĶÀ» »ç¿ëÇÏ¿© ÇöÀç ½Ã°£À» ±âº» Çü½ÄÀ¸·Î Ãâ·ÂÇÏ´Â ÄÚµåÀÔ´Ï´Ù.

// ÇöÀç ½Ã½ºÅÛÀÇ ½Ã°£À¸·Î Date °´Ã¼¸¦ »ý¼º

Date now = new Date();

// ±âº» Çü½ÄÀ¸·Î ¼­½ÄÈ­ÇÏ´Â DateFormat °´Ã¼¸¦ »ý¼º

DateFormat format = DateFormat.getDateTimeInstance();

// format() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© Date °´Ã¼¸¦ ¼­½ÄÈ­

System.out.println("ÇöÀç ½Ã°¢:"+format.format(date));

ÇÊÀÚÀÇ À©µµ¿ì 95¿¡¼­ À§ ³»¿ëÀ» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿É´Ï´Ù.

ÇöÀç ½Ã°¢:1999-03-19 ¿ÀÈÄ 10:32:47

Á»´õ Ä£ÀýÇÏ°Ô ½Ã°£ Á¤º¸¸¦ ³ªÅ¸³»·Á°í ÇÑ´Ù¸é DateFormat °´Ã¼ »ý¼º ºÎºÐÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇÏ¸é µË´Ï´Ù.

DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

ÀÌÁ¦ °á°ú´Â ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³³´Ï´Ù.

ÇöÀç ½Ã°¢:1999³â 3¿ù 19ÀÏ ±Ý¿äÀÏ 10½Ã32ºÐ47ÃÊ ¿ÀÈÄ GMT+09:00

¸¸¾à »ç¿ëÇÏ´Â ·ÎĶ ȯ°æÀÌ ´Ù¸£´Ù¸é µ¿ÀÏÇÑ Äڵ尡 ´Ù¸¥ °á°ú¸¦ º¸¿©ÁÙ °ÍÀÔ´Ï´Ù. ·ÎĶÀÌ Locale.US·Î ÁöÁ¤µÇ¾î ÀÖ´Ù¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿É´Ï´Ù.

ÇöÀç ½Ã°¢:Friday, March 19, 1999 10:32:47 PM GMT+09:00


³¯Â¥/½Ã°£À» Ç¥ÇöÇÒ ¶§ ·ÎĶ°ú ´õºÒ¾î ´ëÇѹα¹¿¡ »ç´Â ÇÁ·Î±×·¡¸Ó°¡ °ü½ÉÀ» °¡Áö´Â ¹®Á¦´Â ŸÀÓÁ¸ÀÇ Ç¥Çö ¹®Á¦ÀÔ´Ï´Ù. ÈçÈ÷ Çѱ¹ Ç¥Áؽöó´Â ŸÀÓÁ¸Àº ±¹Á¦ÀûÀ¸·Î KST¶ó´Â À̸§À¸·Î Åë¿ëµÉ ¹ýÇÏÁö¸¸ JDK 1.2¿¡¼­´Â ±â²¯ "Asia/Seoul"À̶ó´Â À̸§À¸·Î ¾î·Æ°Ô Á¦°øµË´Ï´Ù. "KST"¶ó´Â À̸§À̳ª "Çѱ¹ Ç¥ÁؽÃ"¶ó´Â À̸§ÀÇ Å¸ÀÓÁ¸ °´Ã¼¸¦ Çϳª »ý¼ºÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ SimpleTimeZone Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.

TimeZone kst = new SimpleTimeZone(9*60*60*1000 /* KST´Â GMT+9½ÃÀ̹ǷÎ. */, "Çѱ¹ Ç¥ÁؽÃ")

ÇÁ·Î±×·¥ÀÌ ½ÃÀÛµÉ ¶§ ·ÎĶÀ̳ª ŸÀÓÁ¸À» °íÁ¤ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§¿¡´Â ´ÙÀ½°ú °°Àº ±¸¹®À» Á¤Àû ÃʱâÈ­ ºí·Ï¿¡ ³Ö¾î»ç¿ëÇϸé Æí¸®ÇÕ´Ï´Ù.

// Á¤Àû ÃʱâÈ­ ºí·ÏÀº Ŭ·¡½º°¡ ÀûÀçµÉ ¶§ ÇÑ ¹ø¸¸ ¼öÇàµË´Ï´Ù.

static {

Locale.setDefault(Locale.KOREA); // ·ÎĶ °íÁ¤

TimeZone.setDefault(new SimpleTimeZone(9*60*60*1000, "KST")); // ŸÀÓÁ¸ °íÁ¤

}

ÀÌ ¹æ¹ýÀº ´Ù»ç¿ëÀÚ, ´ÙÁß ·ÎĶ Áö¿ø ½Ã½ºÅÛÀÎ À¯´Ð½º ¼­¹ö¿¡¼­ ½ÇÇàµÇ´Â À¥ ¼­¹öÂÊ ÇÁ·Î±×·¥ÀÎ ¼­ºí¸´ µî¿¡¼­ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.


¹®ÀÚ¿­ÀÇ ÀÎÄÚµù º¯È¯

ÀÚ¹Ù ¹®ÀÚ¿­ÀÇ ÀÎÄÚµùÀ» º¯È¯½ÃÅ°´Â °ÍÀº ¾î·ÆÁö ¾Ê½À´Ï´Ù.

¹ÙÀÌÆ® ¹è¿­À» ÁöÁ¤µÈ ¹®ÀÚ ÀÎÄÚµù¿¡ µû¶ó String °´Ã¼·Î º¯È¯ÇÏ´Â String Ŭ·¡½º »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.

String(byte[] bytes, String encoding)

EUC_KR ÀÎÄÚµù¿¡ µû¶ó ¸¸µé¾îµÐ ÅؽºÆ® ÆÄÀÏ¿¡¼­ ³»¿ëÀ» Àоî ÀÌ°ÍÀ» 8859_1 ÀÎÄÚµùÀ¸·Îµµ Ç¥ÇöÇغ¸°í EUC_KR ÀÎÄÚµùÀ¸·Îµµ Ç¥ÇöÇغ¸°Ú½À´Ï´Ù. ¿µ¾î¸¦ Æ÷ÇÔÇÑ ±âº» ¶óƾ ¹®ÀÚ¸¦ Ç¥ÇöÇÏ´Â 8859_1 ÀÎÄÚµùÀº ¸ðµç ¹®ÀÚ¸¦ 1¹ÙÀÌÆ®·Î ó¸®ÇÏÁö¸¸, EUC_KR ÀÎÄÚµùÀº ÇѱÛÀ» ó¸®Çϱâ À§ÇØ Æ¯Á¤ ¿µ¿ªÀÇ ¹®ÀÚÄÚµå´Â 2¹ÙÀÌÆ® ¹®ÀÚ¸¦ Çؼ®ÇÕ´Ï´Ù. µû¶ó¼­ ÆÄÀϷκÎÅÍ ÀоîµéÀÎ ¹ÙÀÌÆ® ¹è¿­ Áß Çѱۿ¡ ÇØ´çÇÏ´Â ºÎºÐÀ» 8859_1 ÀÎÄÚµù¿¡¼­´Â µÎ °³ÀÇ 1¹ÙÀÌÆ® ¹®ÀÚ·Î Çؼ®ÇÏ°í EUC_KR ÀÎÄÚµù¿¡¼­´Â ÇϳªÀÇ ÇÑ±Û ¹®ÀÚ·Î Çؼ®ÇÒ °ÍÀÔ´Ï´Ù.

¸ÕÀú ¿¹Á¦·Î ¾µ ÅؽºÆ® ÆÄÀÏÀ» ¸¸µì´Ï´Ù. ¿©±â¿¡¼­´Â ¾ÆÁÖ °£´ÜÇÏ°Ô 10°³ÀÇ ¹®ÀÚ·Î ±¸¼ºµÈ ÅؽºÆ® ÆÄÀÏÀ» ¸¸µé¾î ÆÄÀÏ À̸§À» test.txt¶ó°í ÇÏ°Ú½À´Ï´Ù.

abcde°¡³ª´Ù¶ó¸¶

ÇÑ±Û À©µµ¿ì 95/98/NT µî¿¡¼­ ÀÌ ÆÄÀÏÀ» ÀúÀåÇϸé ÀϹÝÀûÀ¸·Î EUC_KR ÀÎÄÚµù¿¡ µû¶ó ÀúÀåµÉ °ÍÀÔ´Ï´Ù.

´ÙÀ½Àº ÀÌ ÆÄÀÏÀ» Àоîµé¿© 8859_1 ÀÎÄÚµù°ú EUC_KR ÀÎÄÚµùÀ¸·Î °¢°¢ Çؼ®ÇØ ¹®ÀÚ¿­À» Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

import java.io.*;

class CharacterEncoding {

public static void main(String args[]) {

// ÆÄÀÏ ÀÔ·Â ½ºÆ®¸²À» ¼±¾ðÇÑ´Ù.

FileInputStream in=null;

try { // test.txt ÆÄÀϷκÎÅÍ ¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²À» »ý¼ºÇÑ´Ù.

in = new FileInputStream("test.txt");

} catch (FileNotFoundException fnfe) {

System.err.println("¿¡·¯:ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.");

System.exit(1);

}

// ÆÄÀÏÀÇ ³»¿ëÀ» ÀúÀåÇÒ ¹ÙÀÌÆ® ¹öÆÛ¸¦ ¼±¾ðÇÑ´Ù.

byte[] buffer=new byte[1024];

try {

// ¹ÙÀÌÆ® ¹öÆÛ¿¡ ÆÄÀÏ ³»¿ëÀ» ÀоîµéÀδÙ.

int len = in.read(buffer, 0, buffer.length);

// ¹ÙÀÌÆ® ³»¿ëÀ» 8859_1 ÀÎÄÚµùµÈ ¹®ÀÚ¿­·Î º¯È¯ÇÑ´Ù.

String ascii=new String(buffer, 0, len, "8859_1");

System.out.println("8859_1 ÀÎÄÚµù:"+ascii);

// ¹ÙÀÌÆ® ³»¿ëÀ» EUC_KR ÀÎÄÚµùµÈ ¹®ÀÚ¿­·Î º¯È¯ÇÑ´Ù.

String ksc=new String(buffer, 0, len, "EUC_KR");

System.out.println("EUC_KR ÀÎÄÚµù:"+ksc);

} catch (IOException ie) {

System.err.println("¿¡·¯:"+ie.getMessage());

System.exit(1);

} finally {

try { in.close(); } catch (IOException ie) {}

}

}

}

½ÇÇàÇغ¸¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.

8859_1 ÀÎÄÚµù:ABCDE¡Æ¢®©ø¨£¢¥?¢Ò?¢¬¢Ò

EUC_KR ÀÎÄÚµù:ABCDE°¡³ª´Ù¶ó¸¶

¹ÙÀÌÆ® ¹è¿­À» 8859_1 ÀÎÄÚµùÀ¸·Î Çؼ®ÇÏ¿© º¯È¯ÇÑ ¹®ÀÚ¿­Àº ÇѱÛÀ» µÎ °³ÀÇ ¹®ÀÚ·Î À߸ø Çؼ®ÇÏ¿´°í, EUC_KR ÀÎÄÚµùÀ¸·Î Çؼ®ÇÑ °æ¿ì¿¡¸¸ Á¦´ë·Î º¸¿©ÁÜÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ·¸°Ô ÀÎÄÚµùÀ» À߸ø Çؼ®ÇÑ ¹®ÀÚ¿­À» ´Ù½Ã ´Ù¸¥ ÀÎÄÚµùÀ¸·Î º¯È¯ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

´ÙÀ½Àº 8859_1·Î ÀÎÄÚµùµÈ À§ÀÇ ascii ¹®ÀÚ¿­ º¯¼ö¸¦ EUC_KR ÀÎÄÚµùÀ¸·Î ´Ù½Ã º¯È¯ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

try {

String string = new String(ascii.getBytes("8859_1"), "EUC_KR");

} catch (UnsupportedEncodingException e) {

System.err.println("Áö¿øÇÏÁö ¾Ê´Â ÀÎÄÚµù ¿¡·¯ :"+e.toString());

}


ÇÙ½É Ã¼Å©

¢Â ÀÚ¹Ù¿¡¼­´Â ÀÔÃâ·ÂÀ» À§ÇØ ½ºÆ®¸²À» ÀÏ°üµÇ°Ô »ç¿ëÇÑ´Ù.

¢Â ÀÚ¹ÙÀÇ ÀÔÃâ·Â ½ºÆ®¸²¿¡´Â ÀϹÝÀûÀÎ µ¥ÀÌÅÍ ÀÔÃâ·Â¿¡ »ç¿ëµÇ´Â ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²°ú ¹®ÀÚ¿­ ÀÔÃâ·ÂÀ» À§ÇÑ ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²ÀÌ ÀÖ´Ù.

¢Â ÇѱÛÀ» Æ÷ÇÔÇÑ ´Ù±¹¾î ȯ°æÀ» Áö¿øÇÏ´Â ¹®ÀÚ¿­ ÀÔÃâ·ÂÀ» À§Çؼ­´Â ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇØ¾ß ÇÑ´Ù.

¢Â ÀÚ¹ÙÀÇ URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ½±°Ô HTTP¿Í FTP Àü¼Û ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¢Â ServerSocket°ú Socket Ŭ·¡½º´Â °¢°¢ Ŭ¶óÀ̾ðÆ®/¼­¹ö ȯ°æÀ» À§ÇÑ ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® ¼ÒÄÏÀ» Áö¿øÇÑ´Ù.


ÇÊÀÚ ¿¬¶ôó : yoonforh@yahoo.com