¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ  Á¦9Àå ÀÚ¹Ù½ºÆ®¸²  9.3.5 RandomAccessFile  

 

9.3.5 RandomAccessFile

 

RandomAccessFileŬ·¡½º´Â FileInputStream, FileOutputStreamÀÇ ½ºÆ®¸² ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏÁö ¾Ê°íµµ ÆÄÀÏÀ» ´Ù·ê ¼ö ÀÖ´Â °£ÆíÇÑ ¹æ¹ýÀ» Á¦°øÇØ ÁÝ´Ï´Ù. À̸§¿¡¼­µµ ¾Ë ¼ö ÀÖµíÀÌ ÆÄÀÏ(File)¿¡ ´ëÇÑ ÀÓÀÇÀÇ Á¢±Ù(Random Access)ÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀÔ´Ï´Ù. ¾Æ·¡ÀÇ ¿¹Á¦´Â Test¶õ ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ±×°÷¿¡ ¼øÂ÷ÀûÀ¸·Î °ªÀ» ±â·ÏÇϰí, ƯÁ¤ À§Ä¡¸¦ ã¾Æ ±×°÷ÀÇ °ªÀ» ´Ù½Ã ´Ù¸¥ °ªÀ¸·Î ¹Ù²ãÁÖ´Â ¿¹Á¦ÀÔ´Ï´Ù.

 

RandomAccessFileTest.java (RandomAccessFileÀ» Å×½ºÆ®ÇÑ ¿¹Á¦)

import java.io.*;

public class RandomAccessFileTest {

   static String s = "ILoveJava~";

   static String q = "Jabook!";

   public static void main(String[] args) throws Exception{

     RandomAccessFile rf = new RandomAccessFile("RandomAccessTest.txt", "rw");

       rf.writeChars(s);

       rf.close();

      rf = new RandomAccessFile("RandomAccessTest.txt", "rw");

       rf.seek(10); 

       rf.writeChars(q);

       rf.close();

      rf = new RandomAccessFile("RandomAccessTest.txt", "r");

       System.out.println("±Û³»¿ëÀº" + rf.readLine());

       rf.close();         

   }

}

C:\JavaExample\09>javac RandomAccessFileTest.java

C:\JavaExample\09>java RandomAccessFileTest

±Û³»¿ëÀº I L o v e J a b o o k !

 

¸ÕÀú ¡®RandomTest¡¯¶õ ÆÄÀÏ À̸§°ú ¡®rw¡¯¶ó´Â ¸Å°³º¯¼ö¸¦ °®°í RandomAccessFile °´Ã¼ rf¸¦ »ý¼ºÇÏ¿´½À´Ï´Ù. ¿©±â¼­ ¡®RandomAccessTest.txt¡¯¶ó´Â ÆÄÀÏÀÌ »ý¼ºµË´Ï´Ù. ¡®rw¡¯´Â »ý¼ºµÈ ¡®RandomAccessTest.txt¡¯ÆÄÀÏ¿¡ Àбâ(read)¿Í ¾²±â(write)°¡ °¡´ÉÇÏ´Ù´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ±×·³ ¸¸¾à ¡®rw¡¯´ë½Å¿¡ ¡®r¡¯À» ½è´Ù¸é ¾î¶»°Ô µÇ¾úÀ» ±î¿ä? À§ÀÇ ±¸¹®¿¡¼­´Â writeDouble¸Þ¼­µå¸¦ »ç¿ëÇϸ鼭 ±â·ÏÀ» Çϰí Àִµ¥ ¡®r¡¯·Î ¼³Á¤µÇ¾î ÀÖ´Ù¸é ±â·ÏÀ» ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¡®java.io.IOException: ¾×¼¼½º°¡ °ÅºÎµÇ¾ú½À´Ï´Ù¡¯ ¶ó´Â ¿¡·¯¹®À» ¸¸³ª°Ô µË´Ï´Ù.

 

n        RandomAccessFile rf = new RandomAccessFile("RandomAccessTest.txt", "rw");

 

¢Ñ RandomAccessFile

ÀÓÀÇ·Î Á¦¾î°¡ °¡´ÉÇÑ ÆÄÀÏÀ» »ý¼ºÇϰųª Á¢±ÙÇÏ¿© ÆÄÀÏÀÇ ³»¿ë¿¡ ´ëÇÑ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.

 

¡°ILoveJava~¡±¶ó´Â ±ÛÀ» writeChars(s)¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© ¡®RandomAccessTest.txt¡¯ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. ±×¸®°í close()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© ÆÄÀÏ ½ºÆ®¸²À» ´Ý°í ½ºÆ®¸²°ú ¿¬°üµÈ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù.

 

n        rf.writeChars(s);

n        rf.close();

 

´Ù½Ã RandomAccessFile°´Ã¼ rf¸¦ »ý¼ºÇÕ´Ï´Ù. ÆÄÀÏÀÇ À̸§Àº ¡®RandomAccessTest.txt¡¯À̰í, ¼Ó¼ºÀº ¡®rw¡¯ÀÔ´Ï´Ù. ¾Æ±î ±× ÆÄÀÏ¿¡ ´Ù½Ã »õ ±ÛÀ» ¾²´Â °ÍÀÔ´Ï´Ù.

 

n        rf = new RandomAccessFile("RandomAccessTest.txt", "rw");

n        rf.seek(10); 

n        rf.writeChars(q);

n        rf.close();

 

±×·±µ¥ À̹ø¿¡´Â seek(10)¸Þ¼­µå¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ÆÄÀÏ Æ÷ÀÎÅÍ ¿ÀÇÁ¼ÂÀ» ¼³Á¤ÇÏ´Â ¸Þ¼­µåÀÔ´Ï´Ù. ½±°Ô ¸»ÇÏ¸é ÆÄÀÏÀÇ Æ¯Á¤ÇÑ byteÀ§Ä¡¸¦ ±â¾ïÇϰí ÀÖ´Ù´Â ¸»ÀÔ´Ï´Ù. ±×¸®°í ±× ¹Ù·Î ¾Æ·¡ ±¸¹®¿¡¼­ writeChars(q)¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© seek()¸Þ¼­µå¿¡¼­ ÁöÁ¤ÇÑ ¹ÙÀÌÆ® À§Ä¡¸¦ Áö³­ ÈÄ °ªÀ» ¡®Jabook!¡¯À¸·Î ¹Ù²ã¹ö·È½À´Ï´Ù. ±×·³ ±× ¡®10¡¯¶ó´Â ¹ÙÀÌÆ® À§Ä¡´Â ¾îµð Àϱî¿ä? ±× À§Ä¡´Â ¹Ù·Î »ý¼ºµÈ °ªÀÇ ¹ÙÀÌÆ®¿Í °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀº char¸¦ Ç¥ÇöÇÒ ¶§ ÇѱÛÀÚ´Â 2byte¸¦ Â÷ÁöÇÑ´Ù´Â °ÍÀ» Àß ¾Ë°í ÀÖÀ» °ÍÀÔ´Ï´Ù. ¹Ù·Î ¡®10¡¯À̶õ ÆÄÀÏÀÇ byte°¡ 10byte°¡ µÇ´Â ÁöÁ¡À» ¸»ÇÕ´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼­´Â ¡°Ilove¡±¶ó´Â ±Û³»¿ëÁß ¡®e¡¯Ãâ·Â°ªÀÇ ½ÃÀÛÀ§Ä¡°¡  10byte°¡ µË´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼­ ¸»¾¸ µå·ÈµíÀÌ ±× ÁöÁ¡À» Áö³­ ÈÄÀÇ °ª-Áï ¡°Java~¡±ÀÇ °ªÀÌ ¡°Jabook!¡±À¸·Î ¹Ù²î¾ú½À´Ï´Ù.

 

¢Ñ seek()¸Þ¼­µå

ÆÄÀÏÆ÷ÀÎÅ͸¦ ƯÁ¤ÇÑ Àý´ëÀ§Ä¡·Î ¼³Á¤ÇÏ¿©, ÇØ´ç ÀÛ¾÷À» ¼öÇàÇϵµ·Ï  ÇØÁØ´Ù. »ý¼ºÀڸŰ³º¯¼ö°¡ ¡®r¡¯À̸é Àбâ Àü¿ë, ¡®rw¡¯¸é Àбâ, ¾²±â ¸ðµÎ °¡´ÉÇÏ´Ù.

 

 ¶Ç ´Ù½Ã RandomAccessFile °´Ã¼ rf¸¦ »ý¼ºÇÏ¿´½À´Ï´Ù. À̹ø¿¡´Â ¼Ó¼ºÀ» ¡®r¡¯·Î¸¸ Çß½À´Ï´Ù. ÇÏÁö¸¸ À̹ø¿¡´Â ÀúÀåµÇ¾îÁø ¡®RandomAccessTest.txt¡¯ÆÄÀÏÀ» Àб⸸ Çϱ⠶§¹®¿¡ »ó°üÀÌ ¾ø½À´Ï´Ù.

 

n        rf = new RandomAccessFile("RandomAccessTest.txt", "r");

n        System.out.println("±Û³»¿ëÀº" + rf.readLine());

n        rf.close();

 

³¡À¸·Î readLine()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© ¡®RandomAccessTest.txt¡¯ÀÇ ³»¿ëÀ» Ãâ·ÂÇÏ¿´½À´Ï´Ù. ±ÛÀÇ ³»¿ëÀº ¡°IloveJava~¡±°¡ ¾Æ´Ñ ¡°IloveJabook!¡±ÀÌ Ãâ·ÂµË´Ï´Ù. ¸ø ¹ÏÀ¸½Ã°Ú´Ù¸é »õ·Î »ý¼ºµÈ ¡®RandomAccessTest.txt¡¯À» ¿­°í È®ÀÎÇØ º¸½Ã±â¹Ù¶ø´Ï´Ù. ÀÌ·¸°Ô RandomAccessFileÀº FileInputStreamŬ·¡½º, FileOutputStreamŬ·¡½º³ª DataInputŬ·¡½º, DataOutputŬ·¡½º¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ ¿øÇÏ´Â ÆÄÀÏÀÇ ¿øÇÏ´Â À§Ä¡¿¡ Á¢±ÙÇÏ¿© °ªÀ» º¯ÇÏ°Ô ÇÏ´Â ¶§ À¯¿ëÇÏ°Ô »ç¿ëµË´Ï´Ù.

 

 ÀÌ·¸°Ô RandomAccessFileŬ·¡½º´Â ÆÄÀÏ¿¡ Á¢±ÙÇØ¼­ µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÒ ¶§ ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¸µç Ŭ·¡½ºÀÔ´Ï´Ù. »ç¿ëÇÏ½Ç ¶§ ¡®r¡¯°ú ¡®rw¡¯ ¼³Á¤ÀÌ¶ó´ø°¡ seek()¸Þ¼­µåÀÇ »ç¿ëµî¿¡ Á¶½É¸¸ ÇØÁÖ¸é Á¤¸» À¯¿ëÇÑ Å¬·¡½ºÀÔ´Ï´Ù.

 

RandomAccessFile »ý¼ºÀÚ¸Þ¼­µå

public RandomAccessFile(File file, String mode) : File Àμö·Î ÁöÁ¤µÈ ÆÄÀÏ¿¡¼­ ÀÐ°í ¼±ÅÃÀûÀ¸·Î ¾²±â À§ÇÑ ¹«ÀÛÀ§ ¾×¼¼½º ÆÄÀÏ ½ºÆ®¸²À» ÀÛ¼ºÇÕ´Ï´Ù.

public RandomAccessFile(String name, String mode) : Á¤µÈ À̸§ÀÇ ÆÄÀÏ¿¡¼­ ÀÐ°í ¼±ÅÃÀûÀ¸·Î ¾²±â À§ÇÑ ¹«ÀÛÀ§ ¾×¼¼½º ÆÄÀÏ ½ºÆ®¸²À» ÀÛ¼ºÇÕ´Ï´Ù.

 

RandomAccessFile ÁÖ¿ä ¸â¹ö¸Þ¼­µå

public void close() : À§ ¾×¼¼½º ÆÄÀÏ ½ºÆ®¸²À» ´Ý°í ½ºÆ®¸²°ú ¿¬°üµÈ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù.

public long length() : ÆÄÀÏÀÇ ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù.

public int read() : ÆÄÀÏ¿¡¼­ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ®¸¦ ÀнÀ´Ï´Ù.

public int read(byte[] b) : ÃÖ´ë b.length ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡¼­ ¹ÙÀÌÆ®ÀÇ ¹è¿­·Î ÀоîµéÀÔ´Ï´Ù.

public int read(byte[] b, int off, int len) : ÃÖ´ë len ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡¼­ ¹ÙÀÌÆ®ÀÇ ¹è¿­·Î ÀоîµéÀÔ´Ï´Ù.

public boolean readBoolean() : ÆÄÀÏ¿¡¼­ booleanÀ» ÀнÀ´Ï´Ù.

public byte readByte() : ÆÄÀÏ¿¡¼­ ºÎÈ£ ºñÆ®°¡ ÀÖ´Â 8 ºñÆ®°ªÀ» ÀнÀ´Ï´Ù.

public double readDouble() : ÆÄÀÏ¿¡¼­ doubleÀ» ÀнÀ´Ï´Ù.

public int readInt() : ÆÄÀÏ¿¡¼­ ºÎÈ£ ºñÆ®°¡ ÀÖ´Â 32 ºñÆ® Á¤¼ö¸¦ ÀнÀ´Ï´Ù.

public String readLine() : ÆÄÀÏ¿¡¼­ ÅØ½ºÆ®ÀÇ ´ÙÀ½ ÇàÀ» ÀнÀ´Ï´Ù.

public String readUTF() : ÆÄÀÏ¿¡¼­ ÇϳªÀÇ ¹®ÀÚ¿­·Î ÀоîµéÀÔ´Ï´Ù.

public void seek(long pos) : ´ÙÀ½ Àб⠶Ǵ ¾²±â ¹ß»ý½Ã ÆÄÀÏ ½ÃÀÛ ºÎºÐ¿¡¼­ ÆÄÀÏ Æ÷ÀÎÅÍ ¿ÀÇÁ¼ÂÀ» ¼³Á¤ÇÕ´Ï´Ù.

public int skipBytes(int n) : Á¤È®È÷ ÀÔ·ÂÀÇ n ¹ÙÀÌÆ®¸¦ °Ç³Ê¶Ý´Ï´Ù.

public void write(byte[] b) : b.length°³ÀÇ ¹ÙÀÌÆ®¸¦ ¿ÀÇÁ¼Â off¿¡¼­ ½ÃÀÛÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® ¹è¿­¿¡¼­ ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

public void write(byte[] b, int off, int len) : len°³ÀÇ ¹ÙÀÌÆ®¸¦ ¿ÀÇÁ¼Â off¿¡¼­ ½ÃÀÛÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® ¹è¿­¿¡¼­ ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

public void write(int b) : ÁöÁ¤µÈ ¹ÙÀÌÆ®¸¦ ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

public void writeBoolean(boolean v) : booleanÀ» 1 ¹ÙÀÌÆ®°ªÀ¸·Î ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

public void writeByte(int v) : byte¸¦ 1 ¹ÙÀÌÆ®°ªÀ¸·Î ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

public void writeDouble(double v) : Double Ŭ·¡½ºÀÇ doubleToLongBits ¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© double Àμö¸¦ longÀ¸·Î º¯È¯ÇÑ ´ÙÀ½ long°ªÀ» 8 ¹ÙÀÌÆ® ¼ö·®À¸·Î »óÀ§ ¹ÙÀÌÆ® ¸ÕÀú ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

public void writeInt(int v) : int¸¦ 4 ¹ÙÀÌÆ®°ªÀ¸·Î »óÀ§ ¹ÙÀÌÆ® ¸ÕÀú ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

void writeUTF(String str) : ±â°è¿¡ µ¶¸³ÀûÀÎ ¹æ¹ýÀ¸·Î UTF-8 ÀÎÄÚµùÀ» »ç¿ëÇÏ¿© ¹®ÀÚ¿­À» ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù.

 



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ
ÀúÀÚ:ÃÖ¿µ°ü