상세 컨텐츠

본문 제목

[Java]Random Aceess

JAVA Language

by mobile 2012. 9. 30. 01:27

본문

반응형

RandomAceessFile 클래스

- 입력과 출력이 동시에 이뤄질 수 있다.

- 입출력 위치를 임의로 변경할 수 있다.

- 파일을 대상으로만 존재하는 스트림이다.


스트림이라는 표현에는 "한쪽 방향으로만 형성되는 데이터의 흐름" 이라는 의미가 담겨있다. 즉 스트림이라 부르기 위해서는 데이터의 입력 및 출력이 순차적이어야하고, 입력만 가능하거나 출력만 가능해야 한다. 그래서 엄밀히 말하면 RandomAccessFile 클래스는 스트림 클래스가 아니다. 대표적인 입력 메소드는 아래와 같다.

- public int read() throws IOException

- public int read(byte[] b, int off, int len) throws IOException

- public final int readInt() throws IOException

- public final double readDouble() throws IOException


RandomAccessFile 클래스는 바이트 단위, 그리고 자료형 단위의 데이터 입력이 가능하다. 뿐만 아니라, 다음의 메소드를 통해서 바이트 단위와 자료형 단위의 데이터 출력도 가능하다.

- public void write(int b) throws IOException

- public void write(byte[]b, int off, int len) throws IOException

- public final void writeInt(int v) throws IOException

- public final double readDouble() throws IOException


무엇보다도 다음의 메소드 호출을 통해서 현재의 입출력 위치를 확인하거나 변경할 수 있는 것이 RandomAccessFile 클래스의 가장 큰 특징이다.

- public long getFilePointer() throws IOException

- public void seek(long pos) throws IOException


RandomAccessFile의 인스턴스는 내부적으로 입출력의 위치를 계속해서 기록한다. 그런데 그 위치 정보는 getFilePointer 메소드의 호출을 통해서 확인이 가능하다. 반면 seek 메소드의 호출을 통해서 입출력의 위치도 변경할 수 도 있다. 


생성자는 아래와 같다.

public RandomAccessfile(String name, String mode) throws FileNotFoundException

이 생성자의 첫 번째 인자를 통해서는 파일의 이름을 전다한다. 그리고 두 번째 인자를 통해서는 파일의 용도 정보를 전달한다(r, rw)


import java.io.IOException;

import java.io.RandomAccessFile;


public class RandomFileReadWrite {


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

// TODO Auto-generated method stub

RandomAccessFile raf = new RandomAccessFile("data.bin", "rw");

System.out.println("Write.......");

System.out.printf("현재 입출력 위치 : %d 바이트 \n", raf.getFilePointer());

raf.writeInt(200);

raf.writeInt(500);

System.out.printf("현재 입출력 위치 : %d 바이트\n", raf.getFilePointer());

raf.writeDouble(48.65);

raf.writeDouble(52.24);

System.out.printf("현재 입출력 위치 : %d 바이트\n", raf.getFilePointer());

System.out.println("Read........");

raf.seek(0); // 맨앞으로 이동

System.out.printf("현재 입출력 위치 : %d 바이트\n", raf.getFilePointer());

System.out.println(raf.readInt());

System.out.println(raf.readInt());

System.out.printf("현재 입출력 위치 : %d 바이트\n", raf.getFilePointer());

System.out.println(raf.readDouble());

System.out.println(raf.readDouble());

System.out.printf("현재 입출력 위치 : %d 바이트\n", raf.getFilePointer());

raf.close();

}

}


[결과]

Write.......

현재 입출력 위치 : 0 바이트 

현재 입출력 위치 : 8 바이트

현재 입출력 위치 : 24 바이트

Read........

현재 입출력 위치 : 0 바이트

200

500

현재 입출력 위치 : 8 바이트

48.65

52.24

현재 입출력 위치 : 24 바이트


반응형

관련글 더보기

댓글 영역