14. Input and Output
|
|

|
ÀÔÃâ·Â½ºÆ®¸² |
µµ½ºÃ¢¿¡¼ ÀÔ·ÂÀ» ¹Þ°í °á°ú¸¦ Ãâ·ÂÇϰíÀÚ ÇÒ¶§´Â Ç¥ÁØÀÔ·Â(System.in), Ç¥ÁØÃâ·Â(System.out) À» »ç¿ëÇÑ´Ù.
ÆÄÀÏÀ» ÀÐ°í ¾²±â À§Çؼ´Â ÆÄÀÏÀÔÃâ·Â, ³×Æ®¿÷À» °æÀ¯ÇϰíÀÚ ÇÒ¶§´Â ³×Æ®¿÷ÀÔÃâ·ÂÀÌ ÇÊ¿äÇÏ´Ù.
ÀÚ¹Ù¿¡¼´Â ¼øÂ÷ÀûÀÎ ÀÔÃâ·Â°ú ºñ¼øÂ÷ÀûÀÎ ÀÔÃâ·ÂÀ» Áö¿øÇÑ´Ù.
ÈçÈ÷ ¼øÂ÷ÀûÀÎ ÀÔÃâ·ÂÀ» Stream À̶ó ºÎ¸£±âµµ ÇÑ´Ù. ÀÌ ¸»¶æÀº ¹æÇâÀÌ ÀÖ´Â ÇϳªÀÇ µ¥ÀÌŸÀÇ È帧À¸·Î
º¸Åë 8ºñÆ®·Î ±¸¼ºµÈ µ¥ÀÌÅ͵éÀÇ È帧À» ¶æÇÑ´Ù. ½ºÆ®¸²Å¬·¡½º¿¡´Â ¹ÙÀÌÆ®½ºÆ®¸²Å¬·¡½º¿Í ¹®ÀÚ½ºÆ®¸²Å¬·¡½º°¡ ÀÖ´Ù.
java.io ÆäŰÁöÀÇ ´ëºÎºÐÀº À̰͵éÀÌ¸ç ¹ÙÀÌÆ®½ºÆ®¸²Å¬·¡½º´Â InputStream , OutputStream À¸·Î ³¡³ª¸ç ¹®ÀÚ½ºÅ©Æ®¸²Å¬·¡½º´Â
Reader, Writer ·Î ³¡³ª°Ô µÈ´Ù.
¿ÀÁ÷ RandomAccessFile Ŭ·¡½º¸¸ÀÌ ºñ¼øÂ÷ÀûÀÎ È帧, Áï ÀÓÀÇ·Î ÆÄÀÏÀÇ ¿øÇÏ´Â À§Ä¡¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â
¸Þ¼Òµå¸¦ Áö¿øÇÑ´Ù.
|
 |
File Class |
ÀÌ Å¬·¡½º´Â ½ÇÁ¦·Î ·ÎÄøӽſ¡ ÆÄÀÏÀ» »ý¼ºÇÏÁö ¾Ê´Â´Ù. ´ÜÁö File °´Ã¼¸¦ »ý¼ºÇÒ »ÓÀÌ´Ù.
»ý¼ºÀÚ´Â
public File(String path)
public File(String path, String name)
public File(File dir, String name)
Áö¿øÇÏ´Â ¸Þ¼Òµå´Â isFile(), canRead(), getAbsolutePath(), getCanonicalPath(),
getName(), getPath(), getParent() .. µîµîÀÌ ÀÖ´Ù. »ç¿ë¹ýÀº ÀÚ¹Ù¹®¼¸¦ Âü°íÇÏ±æ ¹Ù¶õ´Ù.
|
 |
RandomAccessFile Class |
ÀÌ Å¬·¡½º´Â ¿©·¯¸ð·Î À¯¿ëÇÏ´Ù. À̰ÍÀº ¼øÂ÷ÀûÀÎ È帧ÀÌ ¾Æ´Ñ ÆÄÀÏÀÇ ÀÓÀÇÀÇ À§Ä¡ºÎÅÍ ÆÄÀÏÀ» Àаųª ÀúÀåÇÒ ¼ö°¡ ÀÖ´Ù.
¹°·Ð Á÷Á¢ÀûÀ¸·Î Áö¿øÇÏ´Â ¸Þ¼Òµå´Â ¾øÁö¸¸ ´Ù¸¥ ¸Þ¼Òµå¸¦ ¾à°£¸¸ ÀÀ¿ëÇÏ¸é µÈ´Ù.
¿¹¸¦ µé¸é ÆÄÀÏÀÇ ¾ÕºÎºÐºÎÅÍ ¿øÇÏ´Â À§Ä¡¸¦ ¾Ë¾Æ³»±â À§Çؼ´Â seek(long pos) ¸¦ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¸é µÇ°í,
µÞºÎºÐºÎÅÍ À§Ä¡¸¦ ÆÄ¾ÇÇÒ·Á¸é ¸ÕÀú length() ¸¦ ÀÌ¿ëÇØ ±æÀ̸¦ ¾Ë¾Æ³½ÈÄ Àû´çÇÑ offset ¸¦ ÁöÁ¤ÇØ À̰ÍÀ» seek(long pos) ·Î ã¾Æ³»¸é
µÈ´Ù.
»ý¼ºÀÚ´Â
public RandomAccessFile(String name, String mode)
public RandomAccessFile(File file, String mode)
¿©±â¿¡¼ mode ·Î´Â 'r', 'w', 'rw' °¡ ÀÖ´Ù. ÁöÁ¤ÇÑ °Í¿¡ µû¶ó Àаí, ¾²±â ±â´ÉÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù.
Áö¿øÇÏ´Â ¸Þ¼Òµå´Â DataOutput, DateInput ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϱ⠶§¹®¿¡ ´Ù¾çÇÑ ¸Þ¼Òµå°¡
ÀÖ´Ù. ´ëÇ¥ÀûÀÎ °ÍÀ¸·Î´Â readByte(), readInt(), readChar... read(byte[] b, int off, int
len), seek(long pos), readLine() À̿ܿ¡ ¿ªÀ¸·Î writeXXX °¡ ÀÖ¾î ¾²ÀÓ»õ°¡ ´Ù¾çÇÏ´Ï ²Ä²ÄÈ÷ ¸Þ¼Òµå¸¦ ÀÍÈ÷±â
¹Ù¶õ´Ù.
|
 |
InputStream Class |
½ºÆ®¸²±¸Á¶¸¦ ³ªÅ¸³»´Â ¿©·¯°¡Áö Ŭ·¡½ºµéÀº ¸ðµÎ InputStream À̳ª
OutputStream Ŭ·¡½º¸¦ »ó¼ÓÇØ¼ ¸¸µç´Ù. µû¶ó¼ ÀÌ Å¬·¡½ºÀÇ ¸ðµç ¸Þ¼Òµå¸¦ Ȱ¿ëÇÏ°í ±¸ÇöÇÒ ¼ö°¡ ÀÖ´Ù. ÀÌÁ¦ ¹ÙÀÌÆ®½ºÆ®¸²Å¬·¡½º¸¦
»ìÆìº¸ÀÚ.
InputStream :
¸ðµç ¹ÙÀÌÆ®½ºÆ®¸² ÀԷ Ŭ·¡½ºÀÇ ºÎ¸ð Ŭ·¡½º·Î Ãß»óŬ·¡½ºÀÌ´Ù.
... available(), read(), read(byte[] b), read(byte[] b, int offset, int len), close(), seek() ...
ByteArrayInputStream :
¹ÙÀÌÆ®¹è¿·ÎºÎÅÍ ÀоîµéÀ̴ Ŭ·¡½ºÀÌ´Ù.
FileInputStream :
ÆÄÀÏÀ» ÀоîµéÀ̴ Ŭ·¡½ºÀÌ´Ù. ¸ÕÀú ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö »ìÆìº¸´Â°Ô ¿¡·¯Ã¼Å·¿¡ À¯¿ëÇÏ´Ù.
File f = new File("won.txt");
if (f.isFile() && f.exists() ) {
FileInputStream f1 = new FileInputStream("won.txt");
.......
}
BufferedInputStream :
µ¥ÀÌÅ͸¦ ÀоîµéÀ϶§ ÇÊÅÍ¿Í ¹öÆÛ¸µ È¿°ú¸¦ Á¦°øÇØÁִ Ŭ·¡½ºÀÌ´Ù.
FilterInputStream :
FilterInputStreamA(InputStream in) ÇüÅ·Π´Ù¸¥ ÀԷ½ºÆ®¸²À¸·ÎºÎÅÍ µ¥ÀÌŸ¸¦ °¡°øÇØ ³½´Ù.
PushbackInputStream( :
½ºÆ®¸²À¸·ÎºÎÅÍ ÀÏÁ¤Å©±âÀÇ µ¥ÀÌÅ͸¦ ÀоîµéÀÎ ÈÄ Ãë¼ÒÇÒ ¼ö Àִ Ŭ·¡½ºÀÌ´Ù.
ObjectInputStream :
°´Ã¼¸¦ ÀоîµéÀÏ ¼ö Àִ Ŭ·¡½ºÀÌ´Ù.
PipedInputStream :
PipedOutputStream °ú ¦À» ÀÌ·ï »ç¿ëµÈ´Ù.
SequenceInputStream :
¿©·¯ ÀԷ½ºÆ®¸²À» ÇϳªÀÇ ¿¬°áµÈ ÀԷ½ºÆ®¸²À¸·Î °£ÁÖÇÏ°Ô ÇØÁִ Ŭ·¡½ºÀÌ´Ù.
DataInputStream :
»ý¼ºÀÚ°¡ DataInputStream(InputStream in) À¸·Î ÀԷ½ºÆ®¸²À¸·ÎºÎÅÍ ÀÚ¹ÙÀ¯ÇüÀ» ÀоîµéÀ̴ Ŭ·¡½ºÀÌ´Ù.
OutputStream Ŭ·¡½º´Â À§¿¡ ±â¼úÇÑ ÀԷ½ºÆ®¸²°ú ¿ªÇÒÀÌ Á¤¹Ý´ëÀÌ´Ù. ±×¸®°í ¸íεµ ´ÜÁö µÞºÎºÐÀ» OutputStream À¸·Î ¹Ù²ãÁֱ⸸ ÇÏ¸é µÈ´Ù.
°¡·É FileInputStream Àº FileOutputStream ÀÌ µÇ´Â °ÍÀÌ´Ù. ±×¸®°í, ÇѰ¡Áö Ãß°¡µÇ´Â °ÍÀÌ PrintStream À¸·Î ´Ù¾çÇÑ µ¥ÀÌŸ À¯ÇüÀ» °£´ÜÇÏ°Ô Ãâ·ÂÇÏ´Â
ÆíÀÇÀûÀÎ Ãâ·Â½ºÆ®¸²ÀÌ´Ù. Åë»ó »ç¿ëÇÏ´Â System.out ¿©±â¿¡ ¼ÓÇÑ´Ù.
±×·³ ¿¹¸¦ µé¾î ¼³¸íÇØ º¸°Ú´Ù.
ÆÄÀÏÀÔÃâ·Â½ºÆ®¸² Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ÀÌÁøÆÄÀÏÀ» º¹»çÇØ ³»´Â ¿¹Á¦ÀÌ´Ù.
¿©±â¼´Â ¹öÆÛ¸µÀ» ¼öÇàÇÑ´Ù. ¹öÆÛ¸µÀº ÆÄÀÏÀ» ÀÐ°í ¾²´Âµ¥ ÀÖ¾î¼ È¿À²ÀûÀÌ´Ù. Áï ¹öÆÛ¿¡ Àӽ÷ΠÀúÀåÇß´Ù°¡
ÇѲ¨¹ø¿¡ ÀÐ°í ¾²´Â ±â´ÉÀ» ¼öÇàÇϱ⠶§¹®¿¡ ¸Å¹ø ÀÐ°í ¾²´Â ÀÛ¾÷À» ¼öÇàÇÒ Çʿ䰡 ¾ø´Ù. À§¿¡¼ ¾ð±ÞÇÑ Å¬·¡½ºÁß¿¡¼
FilterInput(Output)Stream À» »ó¼ÓÇÑ BufferedInputStream, DataInputStream, PrintStream µîÀÌ´Ù.
FileInputStream fi = new FileInputStream("start.txt");
FileOutputStream fo = new FileOutputStream("end.txt");
BufferedInputStream in = new BufferedInputStream(fi);
BufferedOutputStream out = new BufferedOutputStream(fo);
byte buffer[] =
new byte[1024]; try {
int nRead =
0; //ÆÄÀÏÀÇ ³¡Àº
-1 ÀÌ´Ù.
while ((nRead =
in.read(buffer,0, 1024) > = 0) {
//µ¥ÀÌŸ¸¦ 1byte ¸¸Å start.txt ·ÎºÎÅÍ buffer·Î ÀоîµéÀδÙ.
out.write(buffer, 0, nRead);
//buffer ¿¡ ÀÖ´Â µ¥ÀÌŸ¸¦ end.txt ·Î 1byte ¾¿ ½á ³ª°£´Ù.
}
catch(IOException e) {
System.out.println(e);
}
finally {
fi.close(); in.close(); fo.close(); out.close();
//¸®¼Ò½º ÇØÁö
}
´ëÃæ ÀÌÇØ°¡ °¡¸®¶ó »ý°¢ÇÑ´Ù. ÀԷ½ºÆ®¸²À» ¸¸µé¾î ÁöÁ¤ÇÑ ÆÄÀϷκÎÅÍ read() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© buffer ¿¡ ÀоîµéÀÎ ÈÄ
»ý¼ºµÈ Ãâ·Â½ºÆ®¸²¿¡ write() ·Î Ãâ·ÂÀ» ÇÏ°Ô ÇÏ´Â ¿¹Á¦ÀÌ´Ù. read() ´Â ÀоîµéÀÎ ¹ÙÀÌÆ® ¼ö¸¦ ¹ÝȯÇÏ´Â ¸Þ¼ÒµåÀÌ´Ù.
ÇѰ¡Áö À¯³äÇÒ °ÍÀº ¹Ýµå½Ã close() ¸¦ ½á¼ ½Ã½ºÅÛÀÇ ¸®¼Ò½º¸¦ ÇØÁöÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ¸¸¾à ¹öÆÛ¸µÀ» »ç¿ëÇÑ´Ù¸é
¾ÈÂÊ¿¡ ÀÖ´Â °ÍºÎÅÍ ÇØÁöÇÏ´Â °ÍÀÌ Á¤¼®ÀÌ´Ù. ±×¸®°í ÀÔÃâ·Â °úÁ¤¿¡ »ý±â´Â ¿¹¿Ü󸮸¦ ÇØÁÖ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇϹǷΠtry {}
¹®¿¡¼ ó¸®ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
|
|

|
¹®ÀÚ½ºÆ®¸² |
ÀÚ¹Ù¿¡¼´Â ¹®ÀÚ¸¦ 16ºñÆ®ÀÇ À¯´ÏÄÚµå·Î Ç¥ÇöÇϱ⠶§¹®¿¡ ¹ÙÀÌÆ®´ÜÀ§¸¦ ÅëÇØ ÀÔÃâ·ÂµÈ ½ºÆ®¸²À¸·Î ÀÚ¹ÙÀÇ ¹®ÀÚ¿À» Ç¥ÇöÇÏ·Á¸é
¹®ÀÚÀÎÄÚµù¿¡ µû¶ó ¹®ÀÚ¿À» ¹ÙÀÌÆ®¹è¿·Î º¯È¯ÇØ¾ß Çϰí, ´Ù½Ã ¿ø·¡ÀÇ ¹®ÀÚ¿·Î º¯È¯ÇØ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ »ý±ä´Ù.
ÀÌ·± ¹ø°Å·Î¿òÀ» ÇØ¼ÒÇϱâ À§ÇØ À¯´ÏÄڵ幮ÀÚ¸¦ ÀÐ°í »ç¿ëÇÏ´Â ¹®ÀÚÀÔÃâ·Â ½ºÆ®¸²Å¬·¡½º¸¦ Á¦°øÇÑ´Ù.
»ç¿ë¿¹´Â ¹®ÀÚÀÔÃâ·Â½ºÆ®¸²Å¬·¡½º¿Í À¯»çÇÏ°í ¸íεµ ´ÜÁö µÞºÎºÐÀÇ Input |