CORE
HOME > JAVA > J2SE > CORE
2017.05.22 / 17:56

ÀÚ¹Ù ÀÔÃâ·Â( java stream )

ducati
Ãßõ ¼ö 241
  • 1. ÀÚ¹Ù ÀÔÃâ·Â ±¸Á¶

°´Ã¼°¡ °¡Áö°í Àִ µ¥ÀÌÅÍ´Â ÆÄÀÏ¿¡¼­ Àоî¿Ã ¼öµµ ÀÖ°í ÆÄÀÏ¿¡ ÀúÀåÇÒ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ÆÄÀÏ »Ó¸¸ ¾Æ´Ï¶ó, ÇÁ¸°Åͳª ³×Æ®¿öÅ©¿Í °°Àº ¿ÜºÎ ÀåÄ¡¿¡ µ¥ÀÌÅ͸¦ Ãâ·ÂÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ ÆÄÀÏ ÀÔÃâ·ÂÀÇ ±âº»Àº ½ºÆ®¸²( stream )ÀÌ´Ù. ½ºÆ®¸²À̶õ ¹ÙÀÌÆ® ´ÜÀ§ÀÇ µ¥ÀÌÅ͸¦ ±âº»À¸·Î ÇÑ ¼øÂ÷ÀûÀÎ ÀÔ·Â ¶Ç´Â Ãâ·ÂÀÇ ´Ü¹æÇâ È帧ÀÌ´Ù.

< ÀÚ¹Ù ÀÔÃâ·Â ±¸Á¶ >

ÀÚ¹Ù ÀÔÃâ·Â

ÆÄÀÏ

±âº» ÀÔÃâ·Â

ÇÊÅÍ ÀÔÃâ·Â

¹®ÀÚ ÀÔÃâ·Â

ºñ¼øÂ÷ Á¢±Ù ÆÄÀÏ

°´Ã¼ ÀÔÃâ·Â

ÆÄÀÏ ÀÔÃâ·Â

¹ÙÀÌÆ® ¹è¿­ ÀÔÃâ·Â

ÆÄÀÌÇÁ ÀÔÃâ·Â

¿¬°áÇü ÀÔ·Â

½ºÆ®¸µ ¹öÆÛ ÀÔ·Â

1. ÀÚ¹Ù ÀÔÃâ·Â ¹æ½Ä

ÀÚ¹Ù ÀÔÃâ·Â ¹æ½ÄÀº Å©°Ô ¹ÙÀ̳ʸ® ÀÔÃâ·Â, ¹®ÀÚ ÀÔÃâ·Â, ±âº» µ¥ÀÌÅÍÇü ÀÔÃâ·Â, °´Ã¼ ÀÔÃâ·Â, ½ºÆ®¸² ÅäÅ«È­·Î ºÐ·ùÇÒ ¼ö ÀÖ´Ù.

¹ÙÀ̳ʸ® ÀÔÃâ·Â

¹ÙÀ̳ʸ® ÀÔÃâ·Â( Binary I/O )Àº °¡Àå ±âº»ÀÌ µÇ´Â Àú¼öÁØÀÇ ÀÔÃâ·ÂÀÌ´Ù. ±âº»ÀûÀ¸·Î ¹ÙÀÌÆ® ´ÜÀ§·Î ÀÔÃâ·ÂµÇ±â ¶§¹®¿¡ ¹ÙÀÌÆ® ÀÔÃâ·ÂÀ̶ó°í ÇϸçÆÄÀÏ ÀÔÃâ·Â ¿ª½Ã ±âº»ÀûÀ¸·Î ¹ÙÀ̳ʸ® ÀÔÃâ·Â¿¡ ÇØ´çÇÑ´Ù.¹ÙÀ̳ʸ® ÀÔÃâ·Â ¼Óµµ¸¦ ³ôÀ̱â À§ÇØ ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²À» ÀÌ¿ëÇÒ ¼öµµ ÀÖ´Ù.

¹®ÀÚ ÀÔÃâ·Â

¹ÙÀ̳ʸ® ÀÔÃâ·ÂÀ» ÅëÇؼ­ ¹®ÀÚ¸¦ ÀÔÃâ·ÂÇÏ·Á¸é À¯´ÏÄÚµå¿Í Áö¿ªÄڵ带 »óÈ£ º¯°æÇØ ÁÙ ¼ö ÀÖ´Â ÄÁ¹öÅÍ°¡ ÇÊ¿äÇÏ´Ù. ÀÌ ÄÁ¹öÅ͸¦ Æ÷ÇÔÇÑ Å¬·¡½º°¡ ¹Ù·Î Reader ¹× Writer °è¿­ÀÇ Å¬·¡½º´Ù. ¹ÙÀ̳ʸ® ÀÔÃâ·Âµµ ¹öÆÛ ÀÔÃâ·ÂÀ» °¡Áö°í ÀÖµíÀÌ ¹®ÀÚ ÀÔÃâ·Â( Character I/O )µµ ¹öÆÛ ÀÔÃâ·Â( BufferedReader¿Í BufferedWriter )À» °¡Áö°í ÀÖ´Ù.

±âº» µ¥ÀÌÅÍÇü ÀÔÃâ·Â

¹ÙÀ̳ʸ® ÀÔÃâ·ÂÀ» ÅëÇؼ­ ±âº» µ¥ÀÌÅÍÇüÀÎ byte, char, short, int, double, float, long µîÀÇ µ¥ÀÌÅ͸¦ 1:1·Î ´ëÀÀÇÏ¿© ÀÔÃâ·ÂÇÏ´Â °ÍÀÌ´Ù. ±âº» µ¥ÀÌÅÍÇü ÀÔÃâ·Â( Primitive I/O )Àº ÀÚ¹Ù ¾ð¾î°¡ »ç¿ëÇÏ´Â µ¥ÀÌÅÍÇüÀ» ±×´ë·Î ¹ÙÀ̳ʸ®·Î ´ëÀÀ½ÃŲ °ÍÀ¸·Î µ¥ÀÌÅÍ ÀÚü¸¦ ÀúÀåÇÏ°í º¹¿øÇÏ´Â µ¥ »ç¿ëÇÑ´Ù. ¸¶Âù°¡Áö·Î ¹öÆÛ ÀÔÃâ·ÂÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

°´Ã¼ ÀÔÃâ·Â

°´Ã¼ ÀÔÃâ·Â( Object I/O )Àº ±âº» µ¥ÀÌÅÍÇü ÀÔÃâ·Â°ú ´Þ¸® °´Ã¼¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÀÔÃâ·ÂÇÏ´Â °ÍÀÌ´Ù. ÀÚ¹Ù °´Ã¼¸¦ ÀúÀåÇϱâ À§Çؼ­´Â ´Ü¼øÈ÷ ¹ÙÀÌÆ®³ª ¹®ÀÚ·Î ÀÔÃâ·ÂÇÏ´Â °Í¿¡ ºñÇØ º¹ÀâÇÑ °úÁ¤À» °ÅÄ£´Ù. À̸¦ À§Çؼ­ °´Ã¼ Á÷·ÄÈ­( object serialization ) ±â¹ýÀ» ÀÌ¿ëÇÑ´Ù. Á÷·ÄÈ­¶õ °´Ã¼¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ³ª´²¼­ ÀÔÃâ·ÂÀÌ °¡´ÉÇÏ°Ô ¸¸µå´Â °úÁ¤À» ¸»ÇÑ´Ù.

½ºÆ®¸² ÅäÅ«È­

½ºÆ®¸² ÅäÅ«È­( StreamTokenizing )´Â »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ±ÔÄ¢¿¡ µû¶ó¼­ ¹®ÀÚ¿­À» Àоîµé¿©¼­ ƯÁ¤ÇÑ ÆĽÌÀ» °¡´ÉÇÏ°Ô Çϸç, ´Ü¾î ´ÜÀ§·Î µ¥ÀÌÅ͸¦ Àаųª ÄÞ¸¶(,), ÄÝ·Ð(:), ¼¼¹ÌÄÝ·Ð(;), µîÈ£(=)¿Í °°Àº ±âÈ£¸¦ ±¸ºÐÀÚ·Î Çؼ­ ¹®ÀÚ¿­À» ÀоîµéÀÌ´Â µ¥ »ç¿ëÇÑ´Ù. StreamTokenizer Ŭ·¡½º´Â ¹®ÀÚ¿­À» ó¸®Çϴ Ŭ·¡½º¹Ç·Î ¹®ÀÚ ±â¹Ý ÀÔÃâ·Â Ŭ·¡½ºÀΠReader °´Ã¼¸¦ »ý¼ºÀÚÀÇ ÀÎÀÚ°ªÀ¸·Î ÇØ¾ß ÇÑ´Ù. ÀÏ¹Ý µ¥ÀÌÅÍ ÀÔÃâ·Â Ŭ·¡½ºÀÎ InputStream °´Ã¼¸¦ ÀÌ¿ëÇÏ´Â °ÍÀº ±ÇÀåÇÏÁö ¾Ê´Â´Ù.

< ÀÔÃâ·Â ½ºÆ®¸² °ü·Ã Ŭ·¡½º >

ÀÔÃâ·Â Á¾·ù

Ŭ·¡½º ÆÄÀÏ

¹ÙÀÌÆ® ½ºÆ®¸²

InputStream, OutputStream

ÆÄÀÏ ½ºÆ®¸²

FileInputStream, FileOutputStream

¹ÙÀÌÆ® ¹è¿­ ½ºÆ®¸²

ByteArrayInputStream, ByteArrayOutputStream

µ¥ÀÌÅÍ ½ºÆ®¸²

DataInputStream, DataOutputStream

°´Ã¼ ½ºÆ®¸²

ObjectInputStream, ObjectOutputStream

¹®ÀÚ ½ºÆ®¸²

Reader, Writer

ÆÄÀÏ ¹®ÀÚ ½ºÆ®¸²

FileReader, FileWriter

¹®ÀÚ ¹è¿­ ½ºÆ®¸²

CharArrayReader, CharArrayWriter

¹®ÀÚ¿­ ½ºÆ®¸²

StringBufferInputStream, StringBufferReader, StringBufferWriter

ÆÄÀÌÇÁ ÀÔÃâ·Â

PipeInputStream, PipeOutputStream

PipeReader, PipeWriter

½ºÆ®¸² ÇÊÅÍ

FilterInputStream, FilterOutputStream

FilterReader, FilterWriter

¹öÆÛ ½ºÆ®¸²

BufferedInputStream, BufferedOutputStream

BufferedReader, BufferedWriter

¹ÝȯÇü ½ºÆ®¸²

PushbackInputStream, PushbackReader

±âŸ ½ºÆ®¸²

SequenceInputStream

ºñ¼øÂ÷ ÀÔÃâ·Â

RandomAccessFile

½ºÆ®¸² ÅäÅ«È­

StreamTokenizer

ÀÔ·Â ½ºÆ®¸²°ú Ãâ·Â ½ºÆ®¸²

½ºÆ®¸²À̶õ µ¥ÀÌÅ͸¦ ¹ÙÀÌÆ® ÇüÅ·ΠÀÔÃâ·ÂÇÏ´Â È帧À̶ó ÇÒ ¼ö ÀÖ´Ù. ½ºÆ®¸²Àº ½ÃÀÛÁ¡( ¼Ò½º, source )°ú Á¾·áÁ¡( ½ÌÅ©, sink )À» °¡Áö°í ÀÖÀ¸¸ç, È帣´Â ¹æÇâÀº »ý¼º ½ÃÁ¡¿¡¼­ ´ÜÀÏ ¹æÇâÀ¸·Î °íÁ¤µÈ´Ù. ½ºÆ®¸²Àº »óÇϼöµµ ÆÄÀÌÇÁ¿Í À¯»çÇÑ °³³äÀ¸·Î, »ó¼öµµ¸¦ ÀÔ·Â ½ºÆ®¸²À¸·Î, Çϼöµµ¸¦ Ãâ·Â ½ºÆ®¸²À¸·Î »ý°¢ÇÏ¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù.

ÀÔ·Â ½ºÆ®¸²ÀÇ ¼Ò½º¿Í ÇÁ·Î±×·¥ ³»ºÎ¿¡¼­ ¹ÛÀ¸·Î ³ª°¡´Â Ãâ·Â ½ºÆ®¸²ÀÇ ½ÌÅ©¿¡´Â ´Ù¾çÇÑ ÇüÅ°¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ÀÔ·Â ½ºÆ®¸²ÀÇ ¼Ò½º³ª Ãâ·Â ½ºÆ®¸²ÀÇ ½ÌÅ©°¡ µÉ ¼ö ÀÖ´Â ¿¹¸¦ »ìÆ캸¸é ´ÙÀ½°ú °°´Ù.

. ¹ÙÀÌÆ® ¹è¿­

. String °´Ã¼

. ÆÄÀÏ

. ÆÄÀÌÇÁ( ¿î¿µÃ¼Á¦ ¿ë¾î )

. ´Ù¸¥ ½ºÆ®¸²

. ³×Æ®¿öÅ© Á¢¼Ó

. ÄܼÖ( ÀÔ·ÂÀÇ °æ¿ì¿£ Å°º¸µå, Ãâ·ÂÀÇ °æ¿ì¿£ È­¸é )

2. ÆÄÀÏ

Âü°í : http://download.oracle.com/javase/6/docs/api/java/io/File.html

ÀϹÝÀûÀ¸·Î ÀÔÃâ·ÂÀº ÆÄÀÏÀ» ÅëÇؼ­ ÀÌ·ç¾îÁø´Ù. ÀÚ¹Ù ¾ð¾î¿¡ À־µµ ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÑ °³³äÀÌ´Ù. ÇÏÁö¸¸ ÀÚ¹Ù ÀÔÃâ·Â ÆÐÅ°ÁöÀÇ File Ŭ·¡½º´Â ÀÔÃâ·Â°ú´Â Á÷Á¢ÀûÀÎ °ü·ÃÀÌ ¾ø´Ù.Áï, File °´Ã¼¸¦ ÅëÇؼ­ ÀÔÃâ·ÂÀ» ¼öÇàÇÏÁö ¸øÇÑ´Ù. ´Ù¸¸, File °´Ã¼´Â ÆÄÀÏ ¶Ç´Â µð·ºÅ丮¸¦ Á¢±ÙÇÏ´Â ¸Åü·Î »ç¿ëµÈ´Ù. µû¶ó¼­ ½ÇÁ¦·Î ÀÔÃâ·ÂÇÏ·Á¸é ½ºÆ®¸²À̳ª ºñ¼øÂ÷ Á¢±ÙÀ» Áö¿øÇÏ´Â RandonAccessFile Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù.

File Ŭ·¡½º´Â ÆÄÀÏ ¶Ç´Â µð·ºÅ丮 Á¤º¸¸¦ »ý¼ºÇϰųª »èÁ¦ÇÏ´Â ±â´É¸¸ Á¦°øÇÑ´Ù. File »ý¼ºÀÚ´Â String °´Ã¼ÀÎ ¹®ÀÚ¿­À» ÀÎÀÚ°ªÀ¸·Î Çؼ­ File °´Ã¼¸¦ »ý¼ºÇÑ´Ù. »ý¼ºµÈ File °´Ã¼´Â ÆÄÀϸé°ú °æ·Î( µð·ºÅ丮 ) Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. °æ·Î¿¡´Â ÇöÀç µð·ºÅ丮¿Í »ó°ü¾øÀÌ ÁöÁ¤ÇÏ´Â Àý´ë °æ·Î¿Í ÇöÀç µð·ºÅ丮¿¡ µû¶ó ÆÄÀÏ À§Ä¡°¡ º¯ÇÏ´Â »ó´ë °æ·Î°¡ ÀÖ´Ù. ÀÚ¹Ù ¾ð¾î´Â ¸ÖƼ Ç÷§ÆûÀ» Áö¿øÇϱ⠶§¹®¿¡ µð·ºÅ丮¸¦ Ç¥½ÃÇÏ´Â ÇüÅ´ ¿î¿µÃ¼Á¦¿¡ µû¶ó ´Þ¶óÁø´Ù. À©µµ¿ì¿Í À¯´Ð½ºÀÇ µð·ºÅ丮 Á¤º¸´Â ´ÙÀ½°ú °°´Ù.

¿î¿µÃ¼Á¦

Àý´ë °æ·Î

»ó´ë °æ·Î

À©µµ¿ì

C:\directory\sub ( Áö¿ª ÆÄÀÏ )

\\server\shared_directory( ³×Æ®¿öÅ© ÆÄÀÏ )

.\ ÇöÀç µð·ºÅ丮

..\ »óÀ§ µð·ºÅ丮

À¯´Ð½º

/usr/src

./ ÇöÀç µð·ºÅ丮

../ »óÀ§ µð·ºÅ丮

¾Õ¿¡¼­ ¸»ÇÑ °Íó·³, File °´Ã¼ÀÇ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ­ ÆÄÀÏÀ» ÀÔÃâ·ÂÇÒ ¼ö´Â ¾øÁö¸¸ ½ºÆ®¸² °´Ã¼¸¦ »ý¼ºÇÒ ¶§ ÀÎÀÚ°ªÀ¸·Î ÀÌ¿ëÇÒ ¼ö´Â ÀÖ´Ù. ¶ÇÇÑ ÆÄÀÏÀÌ ÇöÀç Á¸ÀçÇÏ´ÂÁö ¿©ºÎ¿Í ÆÄÀÏ ¼Ó¼º( Àбâ Àü¿ë, ¾²±â Àü¿ë, Àб⠾²±â °¡´É )À» ¾Ë ¼ö ÀÖ´Ù. ±×¸®°í ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ ¸ñ·ÏÀ» ¾ò´Â ¸Þ¼Òµåµµ Á¦°øÇÑ´Ù.

File °´Ã¼´Â final·Î ÁöÁ¤µÇ¾î ÀÖ¾î ÇÑ ¹ø »ý¼ºÇÏ¸é º¯°æÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ File °´Ã¼ÀÇ ÂüÁ¶ º¯¼ö¿¡ ´Ù¸¥ File °´Ã¼¸¦ ÀúÀåÇÒ ¼ö ¾ø´Ù. ´ÙÀ½ ¸î °¡Áö »çÇ×Àº ÆÄÀÏ°ú °ü·ÃµÈ ¿À·ù¸¦ ÁÙÀÏ ¼ö ÀÖ´Â ¹æ¹ýÀÌ´Ù.

. FileInputStream °´Ã¼¸¦ »ý¼ºÇϱâ Àü¿¡ ÀÎÀÚ°ªÀÎ File °´Ã¼¸¦ ÅëÇؼ­ ÆÄÀÏÀÌ ½ÇÁ¦·Î Á¸ÀçÇÏ´Â °ÍÀÎÁö È®ÀÎÇÑ´Ù.

. File °´Ã¼ÀÇ isFile() ¸Þ¼Òµå´Â ÆÄÀÏÀÌ µð·ºÅ丮ÀÎÁö ÆÄÀÏÀÌÁö È®ÀÎÇÏ´Â ¸Þ¼Òµå´Ù.

. ÆÄÀÏÀ» Àбâ Àü¿¡ canRead() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϸé ÆÄÀÏÀÌ Àб⠼ӼºÀ» °¡Áö°í ÀÖ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù.

. ÆÄÀÏÀ» ¾²±â Àü¿¡ canWrite() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϸé ÆÄÀÏÀÌ ¾²±â ¼Ó¼ºÀ» °¡Áö°í ÀÖ´ÂÁö È®ÀÌÇÒ ¼ö ÀÖ´Ù.

´ÙÀ½Àº File °´Ã¼¸¦ ÀÌ¿ëÇÑ °£´ÜÇÑ ¿¹Á¦´Ù. File °´Ã¼ f0, f1, f2¸¦ ¸¸µé¾î File °´Ã¼ÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Ãâ·ÂÇÑ´Ù.

import java.io.File;

publicclasstestFile{

publicstaticvoid main(String[] args){

File f0 =newFile("Name.txt");

File f1 =newFile("..");

File f2 =newFile(f1,"test.java");

// ÆÄÀÏ À̸§

System.out.println("f0.getName() = "+ f0.getName());

// ÆÄÀÏ °æ·Î

System.out.println("f1.getPath() = "+ f1.getPath());

// ÆÄÀÏÀÇ Àý´ë °æ·Î

System.out.println("f0.getAbsolutePath() = "+ f0.getAbsolutePath());

// ÆÄÀÏÀÇ »óÀ§ µð·ºÅ丮

System.out.println("f1.getParent() = "+ f1.getParent());

// ÆÄÀÏÀÇ Á¸Àç ¿©ºÎ

System.out.println("f0.exists() = "+ f0.exists());

// ¾²±â °¡´É ¿©ºÎ

System.out.println("f0.canWrite() = "+ f0.canWrite());

// Àб⠰¡´É ¿©ºÎ

System.out.println("f0.canRead() = "+ f0.canRead());

// µð·ºÅ丮 ÀÎÁö ¿©ºÎ

System.out.println("f1.isDirectory() = "+ f1.isDirectory());

// ÆÄÀÏÀÌ Àý´ë °æ·Î·Î ÁöÁ¤µÇ¾ú´ÂÁö ¿©ºÎ

System.out.println("f2.isAbsolute() = "+ f2.isAbsolute());

// ÆÄÀÏÀÌ ¼öÁ¤µÈ ½Ã°£( longÇü )

System.out.println("f0.lastModified() = "+new java.util.Date(f0.lastModified()));

// ÆÄÀÏÀÇ ±æÀÌ

System.out.println("f0.length() = "+ f0.length());

String[] list = f1.list();

// ÆÄÀÏ ¸ñ·Ï( µð·ºÅ丮ÀÇ °æ¿ì )

System.out.println("f1.list() = {");

for(int i =0; i < list.length; i++)

System.out.println("\t"+ list[i]);

System.out.println("}");

try{

// ±âº» °æ·Î

System.out.println("f1.getCanonicalPath() = "+ f1.getCanonicalPath());

}catch(Exception e){

e.printStackTrace();

}

}

}

½ÇÇàÈ­¸é

f0.getName() = Name.txt

f0.getAbsolutePath() = E:\HYUNKOOK\Workspace\testFile\Name.txt

f1.getPath() = ..

f2.getAbsolutePath() = E:\HYUNKOOK\Workspace\testFile\..\test.java

f1.getParent() = null

f0.exists() = true

f0.canWrite() = true

f0.canRead() = true

f1.isDirectory() = true

f2.isAbsolute() = false

f0.lastModified() = Thu Feb 10 14:10:49 KST 2011

f0.length() = 8

f1.list() = {

.metadata

// ¡¦

testDoubleBuffering

testFile

testThread

}

f1.getCanonicalPath() = E:\HYUNKOOK\Workspace

lastModified() ¸Þ¼Òµå´Â °¡Àå ÃÖ±ÙÀÇ °»½Å ½Ã°£À» longÇüÀ¸·Î ¸®ÅÏÇÑ´Ù. µû¶ó¼­ java.util.Data Ŭ·¡½º¸¦ ÀÌ¿ëÇؼ­ Date °´Ã¼¸¦ »ý¼ºÇÏ¿© Ãâ·ÂÇÏ¿´´Ù. ¶ÇÇÑ list() ¸Þ¼Òµå´Â File °´Ã¼°¡ µð·ºÅ丮ÀÏ °æ¿ì¿¡ Æ÷ÇÔµÈ ÆÄÀÏ ¸ñ·ÏÀ» String[]À¸·Î ¾òÀ» ¼ö ÀÖ´Ù.

3. ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²

ÇÁ·Î±×·¥¿¡¼­ ÀÔÃâ·ÂÀº ¸Å¿ì Áß¿äÇÑ ºÎºÐÀÌ´Ù. °¡Àå ±âº»ÀûÀÎ ÀÔÃâ·ÂÀº ÆÄÀÏ ÀÔÃâ·ÂÀ¸·Î´ëºÎºÐÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â µ¥ ÆÄÀÏÀ» ÀÌ¿ëÇÑ´Ù. ¶ÇÇÑ, ÇÁ·Î±×·¥ ÀÌ¿Ü¿¡µµ ³×Æ®¿öÅ© Åë½ÅÀ̳ª ¿ÜºÎ ÀåÄ¡¿Í Åë½ÅÇÏ´Â µ¥µµ ÀÔÃâ·ÂÀÌ ÇÊ¿äÇÏ´Ù. ( OSÀÇ FS – File System )À» »ý°¢ÇØ º¸ÀÚ.

¾Õ¿¡¼­ ÀÚ¹Ù ÀÔÃâ·ÂÀº ½ºÆ®¸²À» ±â¹ÝÀ¸·Î ÇÏ´Â ÀÔÃâ·ÂÀ̶ó°í Çß´Ù. ½ºÆ®¸²Àº ¹ÙÀÌÆ®¸¦ ´ÜÀ§·Î ÇÏ¿© ¼øÂ÷ÀûÀ¸·Î ÀÔ·Â ¶Ç´Â Ãâ·ÂÀ» ÇÏ´Â ¹æ½ÄÀÌ´Ù. ÀÌó·³ ±âº»ÀûÀÎ ¹ÙÀÌÆ® ´ÜÀ§ ½ºÆ®¸² ÀÔÃâ·ÂÀ» Àú¼öÁØ ½ºÆ®¸²À̶ó°í ÇÑ´Ù. Àú¼öÁØÀÇ ½ºÆ®¸²Àº ¹ÙÀÌÆ® ¶Ç´Â ¹ÙÀÌÆ® ¹è¿­À» ±â¹ÝÀ¸·Î µ¥ÀÌÅ͸¦ ÀÔÃâ·ÂÇÑ´Ù.

¿î¿µÃ¼Á¦´Â ÆÄÀÏÀ» ÅؽºÆ® ÆÄÀÏ°ú ¹ÙÀ̳ʸ® ÆÄÀÏ·Î ³ª´©¾î ´Ù·é´Ù. ÀÌ·¯ÇÑ ±¸º°Àº ÆÄÀÏÀ» ¿­ ¶§ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÀÚ¹Ù ¾ð¾î´Â ¸ðµç ÆÄÀÏÀ» ¼øÂ÷ÀûÀÎ ¹ÙÀÌÆ®ÀÇ ¹è¿­, Áï InputStream ¶Ç´Â OutputStream Ŭ·¡½º·Î Á¦°øµÇ´Â ½ºÆ®¸²À¸·Î ó¸®ÇÑ´Ù.

ÀÔÃâ·Â ½ºÆ®¸²Àº Å©°Ô ÀÔ·Â ½ºÆ®¸²°ú Ãâ·Â ½ºÆ®¸²À¸·Î ³ª´¶´Ù. ÀÔ·Â ½ºÆ®¸²Àº ½ÃÀÛÁ¡( ¼Ò½º )À» »ý¼ºÀÚÀÇ ÀÎÀÚ°ªÀ¸·Î ÇÏ¿© »ý¼ºÇÏ°í, Ãâ·Â ½ºÆ®¸²Àº Á¾·áÁ¡( ½ÌÅ© )À» ÀÎÀÚ°ªÀ¸·Î ÇÏ¿© »ý¼ºÇÑ´Ù. ½ÃÀÛÁ¡ÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó¼­ ÀÔ·Â ½ºÆ®¸²Àº ¹ÙÀÌÆ® ¹è¿­( byte array ), ÆÄÀÏ( file ), °´Ã¼( object ), ÆÄÀÌÇÁ( piped ), ¹®ÀÚ¿­ ¹öÆÛ( string buffer ), ½ÃÄö½º( sequence ) µîÀ¸·Î ³ª´­ ¼ö ÀÖ´Ù. Ãâ·Â ½ºÆ®¸²Àº Á¾·áÁ¡ÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó¼­ ¹ÙÀÌÆ® ¹è¿­( byte array ), ÆÄÀÏ( file ), °´Ã¼( object ), ÆÄÀÌÇÁ( piped ) µîÀ¸·Î ³ª´­ ¼ö ÀÖ´Ù.

ÀÌ¿Í °°Àº ±âº» ½ºÆ®¸² ÀÌ¿Ü¿¡ ½ºÆ®¸²À» °¡°øÇÏ´Â ÇÊÅÍ ½ºÆ®¸²ÀÌ Á¸ÀçÇÑ´Ù. ÇÊÅÍ ½ºÆ®¸²¿¡´Â ¹öÆÛ( buffered ), ¹ÝȯÇü( pushback ), ¶óÀÎ( line number ), µ¥ÀÌÅÍ( data ) ½ºÆ®¸² µîÀÌ ÀÖ´Ù. Ãâ·Â ½ºÆ®¸²¿¡ ÇØ´çÇÏ´Â ÇÊÅÍ ½ºÆ®¸²¿¡´Â ¹öÆÛ( buffered ), µ¥ÀÌÅÍ( data ), ÇÁ¸°Æ®( print ) ½ºÆ®¸² µîÀÌ ÀÖ´Ù.

4. ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²

¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²ÀÌ ±âº»ÀûÀ¸·Î InputStream°ú OutputStream Ŭ·¡½º·ÎºÎÅÍ Á¦°øµÇ´Â °Í°ú ´Þ¸®, ¹®ÀÚ ±â¹ÝÀÇ ÀÔÃâ·Â ½ºÆ®¸²Àº Reader¿Í Writer Ŭ·¡½º·ÎºÎÅÍ Á¦°øµÈ´Ù.

¹®ÀÚ ½ºÆ®¸²Àº Áö¿ªÄÚµå¿Í À¯´ÏÄڵ带 º¯È¯Çϴ º¯È¯±â¸¦ Æ÷ÇÔÇÑ´Ù. ÀÚ¹Ù´Â À¯´ÏÄڵ带 Áö¿øÇÏÁö¸¸, ¿î¿µÃ¼Á¦´Â Áö¿ªÄڵ带 »ç¿ëÇϹǷΠ¹®ÀÚ ½ºÆ®¸²¿¡ ÀÌ·¯ÇÑ º¯È¯±â°¡ ¹Ýµå½Ã ÀÖ¾î¾ß ÇÑ´Ù. ¸®´õ´Â 8ºñÆ® ¹®ÀÚ ½ºÆ®¸²À» 16ºñÆ® À¯´ÏÄÚµå ½ºÆ®¸²À¸·Î, ¶óÀÌÅÍ´Â 16ºñÆ® À¯´ÏÄÚµå ¹®ÀÚ ½ºÆ®¸²À» ÀûÀýÇÑ 8ºñÆ® ¹®ÀÚ ½ºÆ®¸²À¸·Î º¯È¯½ÃÄÑ ÁØ´Ù.

ÀÔ·Â ½ºÆ®¸²¿¡ ´ëÀÀµÇ´Â ¸®´õ¿¡´Â ¼Ò½º Á¾·ù¿¡ µû¶ó ¹öÆÛ( buffered ), ÀÔ·Â( input stream ), ¶óÀÎ( line number ), ¹®ÀÚ ¹è¿­( char array ), ÆÄÀÌÇÁ( piped ), ¹ÝȯÇü( push back ), ¹®ÀÚ¿­( string ) ¸®´õ µîÀ» µé ¼ö ÀÖ´Ù. Ãâ·Â ½ºÆ®¸²¿¡ ´ëÀÀµÇ´Â ¶óÀÌÅÍ¿¡´Â ½ÌÅ© Á¾·ù¿¡ µû¶ó ¹öÆÛ( buffered ), ¹®ÀÚ ¹è¿­( char array ), ÇÁ¸°Æ®( print ), ¹®ÀÚ¿­( string ) ¶óÀÌÅÍ µîÀ» µé ¼ö ÀÖ´Ù.

  • 2. ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²

ÀÔÃâ·Â ½ºÆ®¸²Àº ±âº»ÀûÀ¸·Î ¹ÙÀÌÆ®¸¦ ±â¹ÝÀ¸·Î ÇÑ ¼øÂ÷ÀûÀÎ Á¢±ÙÀ» Çã¿ëÇÑ´Ù. ÀÌ´Â ¼øÂ÷ÀûÀ¸·Î ÀÔ·ÂÇϰųª ¼øÂ÷ÀûÀ¸·Î Ãâ·ÂÇÏ´Â °ÍÀ¸·Î ÀÔÃâ·ÂÀ» ó¸®ÇÏ´Â °ÍÀÌ´Ù. ÀÌÁ¦ ÀÔÃâ·ÂÀ» À§ÇÑ Å¬·¡½º ±¸Á¶¸¦ »ìÆ캸ÀÚ.

1. ÀÔÃâ·Â Ŭ·¡½º °èÃþ ±¸Á¶

ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º¿Í °ü·ÃµÈ Ŭ·¡½º´Â ¿©±â¸¦ Âü°íÇÏÀÚ. http://download.oracle.com/javase/6/docs/api/java/io/package-tree.html

2. ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸²

ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸²À̶õ FileInputStream°ú FileOutputStream Å¬·¡½º¸¦ ÀÌ¿ëÇÑ ÀÔÃâ·ÂÀ» ¸»ÇÑ´Ù. ÀÌµé °´Ã¼´Â »ý¼ºÀÚ È£Ã⠽à ÀÎÀÚ°ªÀ¸·Î File °´Ã¼ ¶Ç´Â ÆÄÀϸíÀ» ÀÌ¿ëÇÑ´Ù. ÆÄÀÏ¿¡¼­ ÀÔÃâ·Â ½ºÆ®¸²À» ¾ò´Â °ÍÀÌ Áß¿äÇϸç, ÆÄÀÏ ÀÔÃâ·ÂÀº ±âº»ÀûÀ¸·Î ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ´Ù.

import java.io.File;

import java.io.FileOutputStream;

import java.io.FileInputStream;

publicclasstestFileStream{

publicstaticvoid main(String[] args){

String filename ="¿¹¹®.txt";

// File °´Ã¼ »ý¼º

File file =newFile(filename);

try{

// File °´Ã¼·ÎºÎÅÍ FileOutputStream °´Ã¼ »ý¼º

FileOutputStream out =newFileOutputStream(file);

// ¹®ÀÚ¿­·ÎºÎÅÍ getBytes()·Î ¹ÙÀÌÆ® ¹è¿­ ¾ò±â

out.write("Java Programming\n".getBytes());

out.write("Å×½ºÆ®ÁßÀÔ´Ï´Ù.\n".getBytes());

out.write("FileInputStream/FileOutputStream\nTest File\n".getBytes());

// 1ºÎÅÍ 30±îÁö byte ´ÜÀ§·Î Ãâ·Â

for(int i =0; i <30; i++){

out.write((byte) i);

}

// ÆÄÀÏ ´Ý±â¸¦ À§ÇØ close() ¸Þ¼Òµå È£Ãâ

out.close();

// ¹®ÀÚ¿­·ÎºÎÅÍ FileInputStream °´Ã¼ »ý¼º

FileInputStream in =newFileInputStream(filename);

int b;

// ÀÔ·ÂÀÌ ³¡³¯ ¶§±îÁö ¹ÙÀÌÆ® ´ÜÀ§·Î ¹Ýº¹ÀûÀ¸·Î Àбâ

while((= in.read())>-1){

System.out.print((char) b);

}

// ÆÄÀÏ ´Ý±â¸¦ À§ÇØ close() ¸Þ¼Òµå È£Ãâ

in.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

½ÇÇàÈ­¸é

Java Programming

FileInputStream/FileOutputStream

Test File

í¡¦¨«ìŠ¢´íŠ¢¬ì¢´¡®ìž¡¦ë‹ˆë‹¢´.

_

¹®ÀÚ¿­ "¿¹Á¦.txt"·ÎºÎÅÍ File °´Ã¼¸¦ »ý¼ºÇÏ°í, File °´Ã¼·ÎºÎÅÍ FileOutputStream °´Ã¼¸¦ »ý¼ºÇÑ´Ù. ¿©±â¿¡ write() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ­ Ãâ·ÂÀ» Çϴµ¥, ±âº»ÀûÀ¸·Î byte ¶Ç´Â byte[] ´ÜÀ§·Î Ãâ·ÂµÇ±â ¶§¹®¿¡ ¹®ÀÚ¿­ Ãâ·ÂÀº getByte() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ­ ¹ÙÀÌÆ® ´ÜÀ§·Î ÀüȯÇÑ´Ù.

¶ÇÇÑ, 1ºÎÅÍ 30±îÁöÀÇ ¹ÙÀÌÆ®Çü ¼ö¸¦ for ¹®À» ÀÌ¿ëÇÏ¿© Â÷·Ê´ë·Î Ãâ·ÂÇÑ µÚ close() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ÆÄÀÏ Ãâ·ÂÀ» Á¾·áÇÑ´Ù. ´Ù½Ã À̹ø¿¡´Â ¹®ÀÚ¿­ filenameÀ¸·ÎºÎÅÍ Á÷Á¢ FileInputStream °´Ã¼¸¦ »ý¼ºÇؼ­ ¹æ±Ý ÀúÀåÇÑ µ¥ÀÌÅ͸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÀÔ·Â¹Þ¾Æ È­¸é¿¡ Ãâ·ÂÇÑ µÚ Á¾·áÇÑ´Ù. ¿ì¼± È­¸é¿¡ Ãâ·ÂµÇ´Â °ÍÀº ¹®ÀÚ·Î º¯È¯µÇ¾î¼­ Ãâ·ÂµÇ¸ç, 1~30 Äڵ忡 ÇØ´çÇÏ´Â ¹®Àڴ Ư¼ö ¹®ÀڹǷΠÀÌ¿¡ ÀûÀýÇÑ ¹®Á¦°¡ È­¸é¿¡ Ãâ·ÂµÈ´Ù.

3. ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²

¹öÆÛ ÀÔÃâ·ÂÀ» ÀÌ¿ëÇÏ¸é µ¥ÀÌÅÍÀÇ ÀÔÃâ·Â ¼Óµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Ù. - ´ÙÀ½¿¡ -

4. ÇÊÅÍ ÀÔÃâ·Â ½ºÆ®¸²

ÇÊÅÍ ÀÔÃâ·Â ½ºÆ®¸²Àº ´Ù¸¥ Á¾·ùÀÇ ÀÔÃâ·Â ½ºÆ®¸²À» Çϳª·Î ¿¬°áÇؼ­ ó¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. - ´ÙÀ½¿¡ -

µ¥ÀÌÅÍ ÀÔÃâ·Â DataInputStream/DataOutputStream

< ¦À» ÀÌ·ç´Â ¸Þ¼Òµå >

DataInputStream ¸Þ¼Òµå

DataOutputStream ¸Þ¼Òµå

byte b = dis.readByte();

dos.wirteByte(b);

char c = dis.readChar();

dos.wirteChar(c);

short s = dis.readShort();

dos.wirteShort(s);

int i = dis.readInt();

dos.wirteInt(i);

long l = dis.readLong();

dos.wirteLong(l);

float f = dis.readFloat();

dos.wirteFloat(f);

double d = dis.readDouble();

dos.wirteDouble(d);

Boolean bl = dis.readBoolean();

dos.wirteBoolean(bl);

String str = dis.readString();

dos.wirteString(str);

import java.io.*;

publicclasstestDataStream{

publicstaticvoid main(String[] args){

String filename ="Korean.bin";

try{

// a ~ g±îÁö ±âº»Çü º¯¼ö ¼³Á¤

int a =1;

float b =(float)11.4;

short c =(short)6213;

long d =1300012;

double e =5919301931.121213049484;

byte f =(byte)3;

char g ='S';

System.out.println("Initial Data");

System.out.println("a (int) = "+ a);

System.out.println("b (float) = "+ b);

System.out.println("c (short) = "+ c);

System.out.println("d (long) = "+ d);

System.out.println("e (double) = "+ e);

System.out.println("f (byte) = "+ f);

System.out.println("g (char) = "+ g);

// ±âº»Çü º¯¼ö Ãâ·Â

DataOutputStream out =newDataOutputStream(newFileOutputStream(filename));

out.writeInt(a);

out.writeFloat(b);

out.writeShort(c);

out.writeLong(d);

out.writeDouble(e);

out.writeByte(f);

out.writeChar(g);

out.close();

// ±âº»Çü º¯¼ö¿¡ µ¥ÀÌÅÍ ÀÔ·Â

DataInputStream in =newDataInputStream(newFileInputStream(filename));

= in.readInt();

= in.readFloat();

= in.readShort();

= in.readLong();

= in.readDouble();

= in.readByte();

= in.readChar();

in.close();

// Ãâ·Â

System.out.println("DataInputStream Data(right)");

System.out.println("a (int) = "+ a);

System.out.println("b (float) = "+ b);

System.out.println("c (short) = "+ c);

System.out.println("d (long) = "+ d);

System.out.println("e (double) = "+ e);

System.out.println("f (byte) = "+ f);

System.out.println("g (char) = "+ g);

// ´Ù½Ã DataInputStream °´Ã¼ »ý¼º

in =newDataInputStream(newFileInputStream(filename));

// ¿ª¼øÀ¸·Î µ¥ÀÌÅÍ ÀÔ·Â

= in.readChar();

= in.readByte();

= in.readDouble();

= in.readLong();

= in.readShort();

= in.readFloat();

= in.readInt();

// À߸ø ÀÔ·ÂµÈ º¯¼ö Ãâ·Â

System.out.println("DataInputStream Data(wrong)");

System.out.println("a (int) = "+ a);

System.out.println("b (float) = "+ b);

System.out.println("c (short) = "+ c);

System.out.println("d (long) = "+ d);

System.out.println("e (double) = "+ e);

System.out.println("f (byte) = "+ f);

System.out.println("g (char) = "+ g);

}catch(Exception e){

e.printStackTrace();

}

}

}

½ÇÇàÈ­¸é

Initial Data

a (int) = 1

b (float) = 11.4

c (short) = 6213

d (long) = 1300012

e (double) = 5.919301931121213E9

f (byte) = 3

g (char) = S

DataInputStream Data(right)

a (int) = 1

b (float) = 11.4

c (short) = 6213

d (long) = 1300012

e (double) = 5.919301931121213E9

f (byte) = 3

g (char) = S

DataInputStream Data(wrong)

a (int) = 2097348691

b (float) = 1.1849933E-25

c (short) = -2547

d (long) = 332803137

e (double) = 1.2549843762898047E-302

f (byte) = 0

g (char) = _

a~g ±îÁö º¯¼ö¸¦ °¢°¢ int, float, short, long, double, byte, char¸¦ ±âº»ÇüÀ¸·Î Çؼ­ ÃʱⰪÀ» ÀúÀåÇÏ°í, À̸¦ DataOutputStream °´Ã¼¸¦ ÀÌ¿ëÇؼ­ ÆÄÀÏ·Î Ãâ·ÂÇÑ ´ÙÀ½ Á¤»óÀûÀÎ ¼ø¼­·Î ÀÔ·ÂÇÏ°í, ÀÔ·Â ¼ø¼­¸¦ ¿ª¼øÀ¸·Î Çؼ­ ÀÔ·ÂÇÑ °á°ú¸¦ Ãâ·ÂÇÑ °ÍÀÌ´Ù. ´ç¿¬È÷ ¼ø¼­°¡ µÚ¹Ù²î¸é óÀ½¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ º¹¿øÇÒ ¼ö ¾øÀ¸¹Ç·Î µ¥ÀÌÅÍ ÀÔÃâ·Â¿¡´Â ¼ø¼­¸¦ Àß ÁöÄÑ¾ß ÇÑ´Ù.

¹ÝȯÇü ÀÔ·Â ½ºÆ®¸² PushbackInputStream

- ´ÙÀ½¿¡ -

¶óÀÎ ½ºÆ®¸² LineNumberInputStream/PrintStream

- ´ÙÀ½¿¡ -

¹ÙÀÌÆ® ¹è¿­ ½ºÆ®¸² ByteArrayInputStream

// ByteArrayInputStream

System.out.println("ByteArrayStream Test: ");

byte[] bytes ="ÀÌ ¹®ÀåÀº ByteArrayInputStreamÀ» À§ÇÑ ¹®ÀåÀÔ´Ï´Ù.".getBytes();

ByteArrayInputStream bin =newByteArrayInputStream(bytes);

int ch;

while((ch = bin.read())>-1){

System.out.print((char)ch);

}

½ÇÇàÈ­¸é

ByteArrayStream Test:

읢¥ 묢¬ìž¥ì?? ByteArrayInputStream을 ì©«„í•©« 묢¬ìž¥ìž¡¦ë‹ˆë‹¢´.


[Ãâó] http://blog.naver.com/hkn10004/20122267759



Ãâó: http://devx.tistory.com/entry/ÀÚ¹Ù-ÀÔÃâ·Â-java-stream [Meta Developer Story]