1996³â 3¿ù 19ÀÏ Ã¹ ÃâÆÇ


¾Õ ÆäÀÌÁö µÞ ÆäÀÌÁö »öÀÎ


¾²·¹µå Ŭ·¡½º¿Í ÀÔÃâ·Â Ŭ·¡½º

ÀÚ¹Ù¿¡¼­ Àß Á¤ÀÇµÈ ½Ã½ºÅÛ µ¶¸³ÀûÀÎ Ãß»ó À©µµ¿ì ½Ã½ºÅÛ ¿Ü¿¡ ¶ÇÇϳª ÁÖ¸ñÇÒ ºÎºÐÀº ¾²·¹µå¸¦ Áö¿øÇÑ´Ù´Â Á¡ÀÌ´Ù.
¾²·¹µå´Â ÇÁ·Î¼¼½º ³»¿¡¼­ ÇϳªÀÇ ¿¬¼ÓÀûÀÎ Á¦¾î È帧ÀÌ´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥ ³»¿¡¼­ ½ÇÇàµÉ ¶§ °¢°¢ÀÇ ¾²·¹µå´Â ÇϳªÀÇ ½ÃÀÛÁ¡ °ú ÇϳªÀÇ È帧À» °¡Áö°í, ·±Å¸ÀÓÀÇ ¸ðµç ½ÃÁ¡¿¡¼­ ÇϳªÀÇ ½ÇÇà ÁöÁ¡À» °¡Áö°í ¶Ç ÇϳªÀÇ ³¡Á¡À» °¡Áø´Ù´Â ÀǹÌÀÌ´Ù. ¾²·¹µå °´ ü´Â ¸ÖƼ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀÇ ±â¹ÝÀ¸·Î ¸ÖƼ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀº ÇϳªÀÇ ÇÁ·Î±×·¥ÀÌ ¼­·Î ´Ù¸¥ ÀÏÀ» ¼öÇàÇÏ´Â ¿©·¯ °³ÀÇ ¾²·¹µå ¸¦ µ¿½Ã¿¡ ¼öÇàÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù.

java.lang.Thread Ŭ·¡½º

½ÇÇà ¾²·¹µå¸¦ »õ·Î Çϳª ¸¸µé·Á¸é java.lang.Thread Ŭ·¡½º¿¡¼­ ÇÏÀ§ Ŭ·¡½º¸¦ ÆÄ»ýÇÏ¿© run() µµ±¸¸¦ ¿À¹ö¶óÀ̵åÇÏ¸é µÈ´Ù. ¿À ¹ö¶óÀ̵åµÈ run() µµ±¸¿¡´Â »õ·Î ¸¸µé¾îÁø ¾²·¹µå°¡ ¼öÇàÇÒ Äڵ尡 µé¾î°¡°Ô µÈ´Ù. ´ÙÀ½ start() µµ±¸¸¦ È£ÃâÇÏ¸é ¾²·¹µå ÀνºÅÏ ½º°¡ »ý¼ºµÈ´Ù. start() µµ±¸´Â ¾²·¹µå¸¦ »ý¼ºÇÏ°í run() µµ±¸¸¦ ½ÇÇàÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.
¿¹¸¦ µé¾î º¸¸é ´ÙÀ½°ú °°´Ù.

class PrimeThread extends Thread {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ public void run() {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ // PrimeThreadÀÇ ½ÇÇà ÄÚµå
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ }
}

ÀÌ ¾²·¹µå¸¦ ½ÇÇà½ÃÅ°·Á¸é ´ÙÀ½°ú °°ÀÌ ¾²·¹µå¿¡¼­ ÆÄ»ýÇÑ Å¬·¡½ºÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ ÈÄ start()¸¦ È£ÃâÇÑ´Ù.

¡¡PrimeThread p = new PrimeThread();
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ p.start();
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ...

¾²·¹µå¸¦ »ý¼ºÇÏ´Â ¶ÇÇϳªÀÇ ¹æ¹ýÀº Runnable ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. Runnable ÀÎÅÍÆäÀ̽º¸¦ Æ÷ÇÔÇÑ ¸ðµç °´Ã¼´Â ÀÌ ¹æ¹ýÀ¸·Î ÇϳªÀÇ ¾²·¹µå·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.

class Primes implements Runnable {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ public void run() {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ // PrimeThreadÀÇ ½ÇÇà ÄÚµå
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ }
}

ÀÌ ¾²·¹µå¸¦ ½ÇÇàÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

Primes p = new Primes();
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ new Thread(p).start();
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ...

ÀÚ¹Ù °¡»ó ±â°è(ÀÚ¹ÙÀÇ Ä¿³Î·Î º¼ ¼ö ÀÖÁö¸¸ ±â°è µ¶¸³ÀûÀ¸·Î Ãß»óÈ­µÈ ºÎºÐ)´Â µ¥¸ó ¾²·¹µå°¡ ¾Æ´Ñ ¸ðµç ¾²·¹µå°¡ Á¾·áÇÒ ¶§±î Áö ½ÇÇàµÈ´Ù. ¾²·¹µå´Â run() µµ±¸¸¦ ¸ðµÎ ¼öÇàÇÏ°í ¹ÝȯµÉ ¶§³ª stop() µµ±¸°¡ È£ÃâµÉ ¶§ Á¾·áÇÑ´Ù.
»õ·Î¿î ¾²·¹µå°¡ »ý¼ºµÉ ¶§ »ý¼ºµÇ´Â ¾²·¹µå´Â ºÎ¸ð ¾²·¹µå(Áï ÀÚ½ÅÀ» »ý¼ºÇÑ ¾²·¹µå)·ÎºÎÅÍ ¿ì¼±±Ç(priority)°ú µ¥¸ó Ç÷¡±×¸¦ »ó¼Ó¹Þ´Â´Ù.
´ÙÀ½Àº °£´ÜÇÑ ¾²·¹µå ¿¹Á¦ÀÌ´Ù. 100°³ÀÇ ¾²·¹µå¸¦ Â÷·Ê·Î ¸¸µé¸é, »ý¼ºµÈ ¾²·¹µå´Â ÀÚ½ÅÀÇ À̸§À» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù. 100°³ÀÇ ¾²·¹µå°¡ »ý¼ºµÇ´Â °ÍÀº ¼ø¼­´ë·ÎÀÌÁö¸¸ »ý¼ºµÈ 100°³ÀÇ ¾²·¹µå°¡ ¼ø¼­´ë·Î ÀÚ½ÅÀÇ ¹®¸ÆÀ» ¼öÇàÇÑ´Ù´Â º¸ÀåÀº ¾øÀ¸¸ç ¹®¸Æ ¼öÇà ÁßÀ̶ó´Â ¹®ÀÚ¿­À» Ãâ·ÂÇϱâ Àü¿¡ System.exit(0)°¡ È£ÃâµÇ¾î °­Á¦·Î Á¾·áÇÒ °¡´É¼ºµµ ÀÖ´Ù.

ThreadTest.java

¡¡

ThreadTest ½ÇÇà °á°ú

¡¡

µ¿±âÈ­

µ¿±âÈ­´Â ¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¡¹Ö¿¡¼­ °íÀüÀûÀÎ ¹®Á¦ÀÌ´Ù. ÀÌ ±ÛÀÇ ¼­µÎ¿¡¼­ µîÀåÇß´ø öÇÐÀÚµéÀÇ ¸¸Âù ¾ÖÇø´À» ±â¾ïÇÏ´ÂÁö? ÀÌ ¾ÖÇø´ÀÇ ÁٰŸ®´Â ´ÙÀ½°ú °°´Ù.
»ý°¢ÇÏ´Â °Í°ú ½Ä»çÇÏ´Â °Í, µÎ °¡Áö Àϸ¸ Çϴ öÇÐÀÚ ´Ù¼¸ ¸íÀÌ ÀÖ´Ù. À̵é öÇÐÀÚ »çÀÌ¿¡ Çϳª¾¿ÀÇ ½ºÆ½ÀÌ ³õ¿© ÀÖ´Ù. ½Ä»ç ¸¦ ÇÏ·Á¸é ¾çÂÊÀÇ ½ºÆ½À» ¸ðµÎ °¡Á®¾ß¸¸ ÇÑ´Ù.
¸¸¾à ¸ðµç öÇÐÀÚ°¡ ¿À¸¥ÂÊÀÇ ½ºÆ½À» Àâ°í ÀÖ°í ¿ÞÂÊÀÇ ½ºÆ½À» ±â´Ù¸°´Ù¸é ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ±×µéÀº ¾Æ¹«µµ ¿ÞÂÊ ½ºÆ½À» ¾òÀ» ¼ö ¾øÀ¸¹Ç·Î ¸ðµÎ ±¾¾îÁ×°Ô µÈ´Ù. ¹°·Ð öÇÐÀÚµéÀº ¸ðµÎ »ç±â¸¦ Ä¥ ÁÙ ¸ð¸£¸ç ¸Ô´Â ¾çµµ ¸ðµÎ °°´Ù°í °¡Á¤ÇÑ´Ù. ÀÌ·± »óŸ¦ µ¥ µå¶ôÀ̶ó°í ÇÑ´Ù. µ¥µå¶ôÀ» ¹æÁöÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ÀÌ ¾ÖÇø´¿¡¼­´Â ´Ù¼¸ °³ÀÇ ½ºÆ½ Áß Çϳª¸¦ Ç¥½ÃÇÏ¿© Ç¥½ÃµÈ ½ºÆ½À» ÀâÀ» °æ¿ì ¹Ýµå½Ã ³»·Á³õ°í ´Ù¸¥ ½ºÆ½À» ½ÃµµÇϵµ·Ï ÇÏ°í ÀÖ´Ù. ÀÌ·¸°Ô Çϸé À§¿Í °°Àº µ¥µå¶ô »óȲÀÌ ¹ß»ýÇϱâ Àü¿¡ Ç¥½ÃµÈ ½º ƽÀÇ ¿ÞÂÊ Ã¶ÇÐÀÚ´Â ¿À¸¥ÂÊÀÇ Ç¥½ÃµÈ ½ºÆ½À» ³»·Á³õ°í ¿ÞÂÊ ½ºÆ½À» ±â´Ù¸®°Ô µÇ¹Ç·Î Ç¥½ÃµÈ ½ºÆ½ÀÇ ¿À¸¥ÂÊ Ã¶ÇÐÀÚ°¡ ¿ÞÂÊ ½ºÆ½À» ¾òÀ» ¼ö ÀÖ°Ô µÈ´Ù.
[±×¸²] °íÀüÀûÀÎ µ¿±âÈ­ ¹®Á¦¸¦ ´Ù·é ½Ä»çÇϴ öÇÐÀÚµé ¾ÖÇø´

¡¡´ÙÀ½Àº µ¥µå¶ô »óŸ¦ Ç¥ÇöÇØÁÖ´Â °£´ÜÇÑ ¾ÖÇø´ ¿¹Á¦ÀÌ´Ù.

ThreadTest2.java

¡¡
<ThreadTest2.html>

<html>
<head><title>Thread Test 2</title></head>
<body>
<h2>DeadLock Condition</h2>
<applet code="ThreadTest2" width=300 height=300>
<param name=WorkA value=5> <! value´Â 1/1000 ÃÊ ´ÜÀ§·Î ÁÖ¾îÁø´Ù.>
<param name=WorkB value=10>
<! µÎ °³ÀÇ º¯¼ö °ªÀÌ °°°Å³ª ºñ½ÁÇÒ °æ¿ì °á°ú´Â µÑ ´Ù ½ÇÆÐ(µ¥µå¶ô)ÀÌ´Ù.>
</applet>
</body></html>

[±×¸²] µ¥µå¶ô Á¶°ÇÀ» º¸¿© ÁÖ´Â ¾ÖÇø´
ÀÌ ¿¹Á¦ ¾ÖÇø´Àº º¯¼ö·Î WorkA¿Í WorkB¸¦ ¹Þ´Âµ¥ ÀÌ°ÍÀº A, B ¾²·¹µåÀÇ °¢°¢ÀÇ ÀÛ¾÷ ½Ã°£À̶ó°í º¼ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î sleep() µµ±¸ÀÇ ÀÎÀÚ°ªÀ¸·Î »ç¿ëµÈ´Ù. ÀÌ µÎ °ªÀÌ ºñ½ÁÇϸé (¿¹¸¦ µé¾î ±âº»°ªÀÎ 5¶ó°í Çϸé) µÎ ¾²·¹µåÀÇ ½ÇÇà ¼Óµµ°¡ ºñ½ÁÇÏ°Ô µÇ¾î ¼­ ·Î ´Ù¸¥ÂÊÀÌ ¸ÕÀú ¼öÇàÀ» ³¡³»°í ±× °á°ú¸¦ ±â·ÏÇØ Áֱ⸦ ±â´Ù¸®´Â µÎ ¾²·¹µå´Â ¸ðµÎ ½ÇÆÐÇÏ°Ô µÈ´Ù. ¼­·Î°¡ »ó´ë¹æÀÇ °ªÀ» ¹« ÇÑÈ÷ ±â´Ù¸®´Â »óȲ, ÀÌ°ÍÀÌ ¹Ù·Î µ¥µå¶ô Á¶°ÇÀÌ´Ù.(½ÇÁ¦ µ¥µå¶ô »óȲÀÌ µÇ¸é ÇÁ·Î¼¼½º´Â ÁøÇàÀ» ¸ØÃß°Ô µÈ´Ù. ÀÌ ¿¹Á¦´Â ´Ü¼øÈ÷ µ¥µå¶ô Á¶°Ç¸¸ º¸¿©ÁÖ°í Á¾·áÇϵµ·Ï Çß´Ù.) ÀÎÀÚ°ªÀÌ Â÷ÀÌ°¡ ³ª´Â °æ¿ì, ¿¹¸¦ µé¾î WorkA=5, WorkB=10ÀÎ °æ¿ì¿¡´Â º¸Åë Çϳª°¡ ¸ÕÀú ÀÏÀ» Á¾·áÇÏ°Ô µÇ¹Ç·Î µ¥µå¶ô »óȲÀÌ ¹ß»ýÇÏÁö ¾ÊÀ¸³ª ¾²·¹µåÀÇ ¼öÇà ¼ø¼­´Â »óȲ¿¡ µû¶ó ¿î¿µ üÁ¦ÀÇ Ä¿³ÎÀÌ °áÁ¤ÇÏ´Â °Í À̹ǷΠÇ×»ó ¹ß»ýÇÏÁö ¾Ê´Â´Ù°í º¸ÀåÇÒ ¼ö´Â ¾ø´Ù.

µ¥µå¶ô ¿Ü¿¡ ½Ä»çÇϴ öÇÐÀÚ ¾ÖÇø´¿¡¼­ µÎ ¸íÀÇ Ã¶ÇÐÀÚ°¡ µ¿½Ã¿¡ ½ºÆ½À» Àâ´Â °æ¿ìµµ ¹®Á¦°¡ ¹ß»ýÇϴµ¥ ÀÌ°ÍÀº ½ºÆ½À» Àâ´Â °ÍÀ» ¹¦»çÇÏ´Â µµ±¸ÀÇ µµ±¸ Á¦ÇÑÀÚ¸¦ synchronized·Î »ç¿ëÇÏ¸é ¹æÁöÇÒ ¼ö ÀÖ´Ù. synchronized·Î ¼±¾ðµÈ µµ±¸´Â ÇϳªÀÇ ¾²·¹µå°¡ ÀÌ ¹®¸ÆÀ» ¼öÇàÇÏ°Ô µÇ¸é ´Ù¸¥ ¾²·¹µå´Â ºí·ÏµÇ¾î ±â´Ù¸®´Ù°¡ ¸ÕÀú µé¾î°£ ¾²·¹µå°¡ ¼öÇàÀ» ³¡³»°í ¸®ÅÏÇÏ´Â ¼ø°£¿¡ ¼öÇàÀ» ½ÃÀÛ ÇÑ´Ù. Âü°í·Î ÀÚ¹Ù´Â synchronized µµ±¸¸¦ ±¸ÇöÇϱâ À§Çؼ­ ¼Ö¶ó¸®½º¿¡¼­´Â ¹ÂÅØ(Å©±â°¡ 1ÀÎ ¼¼¸¶Æ÷¾î¶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.) ¿À ºêÁ§Æ®, win32¿¡¼­´Â Å©¸®Æ¼Äà ¼½¼Ç(µ¿ÀÏ ÇÁ·Î¼¼½º ³»ÀÇ ¹ÂÅØÀ̶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.) ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÑ´Ù. ¼¼¸¶Æ÷¾î µîÀ» »ç¿ë ÇÏ¿© µ¿±âÈ­ÇÏ´Â °ÍÀº C ȤÀº C++ ÇÁ·Î±×·¥¿¡¼± ±î´Ù·Î¿î ºÎºÐÀÏ ¼ö¹Û¿¡ ¾ø´Âµ¥ ÀÚ¹Ù´Â À̵éÀ» synchronized ¿¹¾à¾î Çϳª·Î ÇØ°á ÇÒ ¼ö ÀÖµµ·Ï ¹è·ÁÇÑ °ÍÀÌ´Ù.
´ÙÀ½Àº °£´ÜÇÑ µ¿±âÈ­ ¿¹Á¦ÀÌ´Ù.

ThreadTest3.java

¡¡ÀÌ ¿¹Á¦ ÇÁ·Î±×·¥Àº µÎ °³ÀÇ ¾²·¹µå°¡ ÇϳªÀÇ ÆÄÀÏ¿¡ ÀÔÃâ·ÂÀ» ÇÒ ¶§ ¹ß»ýÇÏ´Â ¹®Á¦¸¦ ´Ù·é °ÍÀÌ´Ù. SeqTh read Ŭ·¡½ºÀÇ static µµ±¸ÀÎ doSeq()´Â seqnofileÀ̶ó´Â À̸§ÀÇ ÆÄÀÏÀ» ÀÐ¾î ±× ³»¿ëÀÎ Á¤¼ö¸¦ Ãâ·ÂÇÏ°í ÇöÀç °ª¿¡ 1À» ´õÇÏ¿© ÆÄÀÏ¿¡ ¾²´Â ÀÏÀ» ½º¹« ¹ø ¹Ýº¹ÇÑ´Ù.
ÀÌ ÇÁ·Î±×·¥ÀÇ ½ÇÇà°á°ú´Â ´ÙÀ½°ú °°´Ù.

ThreadTest3 ½ÇÇà °á°ú 1

¡¡
Áï, µÎ ¾²·¹µå Áß ¸ÕÀú ¼öÇàµÈ ¾²·¹µå°¡ 0¿¡¼­ 19±îÁö °ªÀ» ¾´ ´ÙÀ½ ´ÙÀ½ ¾²·¹µå´Â ¾Õ ¾²·¹µåÀÇ ¼öÇàÀÌ ³¡ ³¯ ¶§±îÁö ±â´Ù¸®´Ù°¡ ¾Õ ¾²·¹µå°¡ ÆÄÀÏ¿¡ ¾´ ¸¶Áö¸· °ªÀÎ 19¸¦ Àоîµé¿© ¼öÇàÀ» ÇÏ°Ô µÈ´Ù.
doSeq() µµ±¸°¡ ¸¸¾à synchronized·Î ¼±¾ðµÇÁö ¾Ê¾Ò´Ù¸é (½ÇÁ¦·Î synchronized¸¦ ÁÖ¼® ó¸®ÇÏ°í ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇغ¸±æ ¹Ù¶õ´Ù. ) µÎ °³ÀÇ ¾²·¹µå°¡ °æÀïÀûÀ¸·Î ÆÄÀÏÀ» ÀÐ°í ¾²±â ¶§¹®¿¡ ÆÄÀÏ Á¢±Ù ÀÚü°¡ ¿¡·¯°¡ ³ª°Å³ª ¿ì¿¬È÷ Á¦´ë·Î ½ÇÇàµÇ´õ¶óµµ ±× °ªÀÌ ÀüÇô ¼ø¼­¸¦ ÁöÅ°Áö ¾ÊÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº synchronized¸¦ ÁÖ¼®Ã³¸®ÇÒ ¶§ÀÇ ÇÑ ½ÇÇà ¿¹ÀÌ´Ù.

ThreadTest3 ½ÇÇà °á°ú 2-synchronized¸¦ ÁÖ¼® ó¸®ÇÑ °æ¿ì

¡¡µÎ °³ÀÇ ¾²·¹µå°¡ ¼­·Î °æÀïÀûÀ¸·Î ÆÄÀÏÀ» ÀÐ°í ¾²±â ¶§¹®¿¡ seqnoÀÇ °ªÀÌ °¢ ¾²·¹µåº°·Î ¼ø¼­°¡ ¸ÂÁö ¾Ê °í °ªÀÌ ¾ûÄÑ °©ÀÚ±â seqno °ªÀÌ Å©°Ô Áõ°¡ÇÏ¿´´Ù.

HERE TO GO

java.io ÆÐÅ°Áö

À§ÀÇ ThreadTest3.java ¿¹Á¦ ÆÄÀÏÀ» »ìÆ캸¸é ÆÄÀÏ ÀÔÃâ·ÂÀ» ÇÏ´Â °ÍÀÌ ´«¿¡ ¶é °ÍÀÌ´Ù.
µð½ºÅ© ÆÄÀÏÀº ÆÄÀÏ Æ÷ÀÎÅ͸¦ ÀÓÀÇ·Î Á¶ÀÛÇÒ ¼ö ÀÖ´Â ÀÓÀÇ Á¢±Ù ÆÄÀÏ(Random Access File)À̱⠶§¹®¿¡ À§ÀÇ ¿¹Á¦Ã³·³ RandomAccessFile Ŭ·¡½º·Î ÆÄÀÏÀ» ó¸®Çϸé ÀÐ°í ¾²´Â °ÍÀÌ °£´ÜÇÏ´Ù.
Æ÷ÀÎÅ͸¦ ÀÓÀÇ·Î Á¶ÀÛÇÒ ¼ö ¾ø´Â ÀϹÝÀûÀÎ ½ºÆ®¸² ÀÔÃâ·ÂÀÇ °æ¿ì¿¡´Â java.io.InputStreamÀ̳ª java.io.OutputStream Ŭ·¡½º ÀνºÅϽº¸¦ »ý¼ºÇÏ¿© ÀÔÃâ·ÂÀ» ÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº InputStream(OutputStream)¿¡¼­ ÆÄ»ýµÈ Ŭ·¡½ºÀÎ FileInputStream(FileOutputStream) Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ÆÄÀÏ ÀÔ Ãâ·Â ÇÁ·Î±×·¥ÀÌ´Ù. ÆÄÀÏ ½ºÆ®¸² Ŭ·¡½ºµéÀº ÀÓÀÇ Á¢±Ù ÆÄÀÏÀÌ ¾Æ´Ï±â ¶§¹®¿¡ Æ÷ÀÎÅ͸¦ Á¶ÀÛÇÏ´Â seek()°ú °°Àº µµ±¸°¡ ¾ø´Ù´Â Á¡À» Á¦¿ÜÇϸé RandomAccessFile°ú °ÅÀÇ µ¿ÀÏÇÑ µµ±¸µéÀ» °¡Áö°í ÀÖ´Ù. ½ºÆ®¸²À» Á¶ÀÛÇÒ ¶§ ¸ÕÀú FileInputStream ÀνºÅϽº¸¦ »ý ¼ºÇÏ°í À̸¦ ÀÎÀÚ·Î DataInputStream ÀνºÅϽº¸¦ »ý¼ºÇÏ¿© ½ÇÁ¦ ½ºÆ®¸² ÀÔ·Â Á¶ÀÛÀ» ÇàÇÏ´Â ¼ø¼­¸¦ ´«¿©°Ü º¸¾ÆµÎÀÚ. ½ºÆ®¸² Ãâ ·ÂÀÇ °æ¿ì¿¡´Â ¸ÕÀú FileOutputStream ÀνºÅϽº¸¦ »ý¼ºÇÏ°í À̸¦ ÀÎÀÚ·Î PrintStream ÀνºÅϽº(ȤÀº DataOutputStream ÀνºÅϽº) ¸¦ »ý¼ºÇÏ¿© ½ºÆ®¸²À» Á¶ÀÛÇÑ´Ù.
[±×¸²] ½ºÆ®¸² ÀÔÃâ·Â °ü·Ã Ŭ·¡½º °èÃþ ±¸Á¶
<±×¸² > ½ºÆ®¸² ÀÔÃâ·Â °ü·Ã Ŭ·¡½º °èÃþ ±¸Á¶

TextCopy.java

¡¡
À§ÀÇ ¿¹Á¦´Â ÅؽºÆ® ¿ø½Ã ÆÄÀÏÀ» ÇÑ ÁÙ¾¿ È­¸é Ãâ·ÂÀ» Çϸ鼭 µ¿½Ã¿¡ ¸ñÀû ÆÄÀÏ·Î º¹»çÇÑ´Ù. ÇÏÁö¸¸ win32¿Í ¼Ö¶ó¸®½º ½Ã½ºÅÛÀº ÅؽºÆ® ÆÄÀÏ¿¡¼­ °³Çà ¹®ÀÚ¸¦ ´Ù·ç´Â ¹æ½ÄÀÌ ´Ù¸£¹Ç·Î ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ÆÄÀÏ·Î º¹»çµÇÁö´Â ¾ÊÀ» °ÍÀÌ´Ù.

ÀÚ¹Ù¿¡¼­ ¾ÖÇ÷¯ÄÉÀ̼ǰú ´Þ¸® ¾ÖÇø´Àº ¼­¹ö·ÎºÎÅÍÀÇ ÀÔÃâ·Â¿¡ Á¦ÇÑÀÌ ¸¹´Ù. ¾ÖÇø´ÀÌ Å¬¶óÀ̾ðÆ®ÀÇ µð½ºÅ©¿¡ ¾²±â¸¦ ÇÒ ¼ö ÀÖ ´Â ¹æ¹ýÀº Ŭ¶óÀ̾ðÆ®ÀÇ »ç¿ëÀÚ°¡ ÇØ´ç Ŭ·¡½º ÆÄÀÏÀ» Á÷Á¢ ÀÚ½ÅÀÇ µð½ºÅ©¿¡ ¼³Ä¡ÇÏ¿© Á¢±Ù ±ÇÇÑÀ» ¼öÁ¤ÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù.¡¡¡¡


¾Õ ÆäÀÌÁö µÞ ÆäÀÌÁö »öÀÎ